Ruby on Rails (RoR) là một web framework được viết bằng ngôn ngữ Ruby và tất cả các ứng dụng trong Rails sẽ được viết bằng Ruby. Ruby on Rails được tạo ra để hỗ trợ các lập trình viên việc phát triển các phần mềm nền web một cách nhanh nhất có thể. Rails framework tận dụng các đặc điểm của ngôn ngữ Ruby. Yukishiro Matzumoto viết ra ngôn ngữ này vào năm 1995, nó khá giống với các ngôn ngữ thông dịch khác như Perl, Eiffel, Python…. Ruby là ngôn ngữ script, định nghĩa kiểu động và là một ngôn ngữ hướng đối tượng, nó được thiết kế với một cú pháp trong sáng, tạo cảm giác dễ đọc, và viết code ngắn gọn nhất có thể đối người dùng, ví dụ như nó không cần dấu chấm phẩy khi kết thúc câu lệnh, không cần các dấu ngoặc đơn khi khai báo các phương thức, có những đoạn code thậm chí được viết giống như việc chúng ta viết tiếng anh vậy. Nó được thiết kế để lập trình ứng dụng web dễ dàng hơn bằng cách tạo ra các giả định về những thứ mà nhà phát triển muốn bắt đầu. Rails là một phần mềm kiểu độc đoán, tức là nó giả định rằng đây là cách tốt nhất để làm việc, và nó được thiết kế để khuyến khích cách làm đó – và trong một số trường hợp nó ngăn cản những lựa chọn thay thế.
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ - ĐHQGHN CÁC VẤN ĐỀ HIỆN ĐẠI CỦA CÔNG NGHỆ PHẦN MỀM RUBY ON RAILS NGUYỄN NHẬT TÂN, NGUYỄN VĂN CƯỜNG, TRẦN MINH THẮNG 26/11/2013 Mục lục Giới thiệu Ruby on Rails 1.1 Tại gọi Ruby on Rails? 1.2 Một số Website dùng Ruby on Rails 1.3 Cài đặt Ruby on Rails 1.4 Công cụ phát triển .6 Đặc trưng Ruby on Rails .6 2.1 Các đặc trưng .6 2.2 Cấu trúc thư mục ứng dụng .7 2.3 Model – View – Controller .8 2.4 Model .8 2.5 View .8 2.6 Controller .9 Định tuyến Ruby on Rails 3.1 Giới thiệu .9 3.2 Path URL Helper 10 3.3 Các tài nguyên lồng .10 3.4 Tạo Path URL từ Object .11 Active Record gì? .12 Object Relational Mapping (ORM) 13 Active Record ORM Framework .14 Quy ước cấu hình Active Record .14 7.1 Quy ước đặt tên .14 7.2 Quy ước lược đồ (schema) 15 Thao tác với Model .15 Console Rails .16 10 Cơ sở liệu Rails .17 11 Quản lý Relation với Active Record 19 12 CRUD – đọc ghi liệu .21 12.1 Create 21 12.2 Read .21 12.3 Update .22 12.4 Delete 22 13 Active Record Migrations 22 14 Giới thiệu Scaffolding .24 15 Đánh giá 24 16 Demo ứng dụng 26 16.1 Blog 26 16.2 Cửa hàng sách trực tuyến 26 Giới thiệu Ruby on Rails 1.1 Tại gọi Ruby on Rails? Ruby on Rails (RoR) web framework viết ngôn ngữ Ruby tất ứng dụng Rails viết Ruby. Ruby on Rails tạo để hỗ trợ lập trình viên việc phát triển phần mềm web cách nhanh có thể. Rails framework tận dụng đặc điểm ngôn ngữ Ruby. Yukishiro Matzumoto viết ngôn ngữ vào năm 1995, giống với ngôn ngữ thông dịch khác Perl, Eiffel, Python…. Ruby ngôn ngữ script, định nghĩa kiểu động ngôn ngữ hướng đối tượng, thiết kế với cú pháp sáng, tạo cảm giác dễ đọc, viết code ngắn gọn đối người dùng, ví dụ không cần dấu chấm phẩy kết thúc câu lệnh, không cần dấu ngoặc đơn khai báo phương thức, có đoạn code chí viết giống việc viết tiếng anh vậy. Nó thiết kế để lập trình ứng dụng web dễ dàng cách tạo giả định thứ mà nhà phát triển muốn bắt đầu. Rails phần mềm kiểu độc đoán, tức giả định cách tốt để làm việc, thiết kế để khuyến khích cách làm – số trường hợp ngăn cản lựa chọn thay thế. 1.2 Một số Website dùng Ruby on Rails Github.com: Hệ thống quản lý source phân tán, nhiều công ty lớn sử dụng, có hàng triệu người sử dụng trang web nơi lưu trữ dự án họ. Basecamp.com: website quản lý dự án online, đời vào năm 2004, năm 2012 có triệu dự án quản lý website này. Twitter.com: trang mạng xã hội lớn thứ sau facebook, sử dụng phổ biến Mĩ nước châu Âu Scibd.com: trang web chia sẻ tài liệu trực tuyến lớn tiếng, có nhiều tài liệu hay miễn phí chia sẻ đây. Và số website khác tiếng hulu.com, hay slideshare.com, nhiều trang web khác. 1.3 Cài đặt Ruby on Rails Bình thường để cài đặt Ruby on Rails phải cài đặt tất phần sau: 1. Ruby 2. Rails 3. SQLite 4. Bundler 5. DevKit . Sau cài hết tất phần bạn phải cài đường dẫn (nếu cần), nhiên điều thời gian không dễ dàng. Giải pháp đơn giản nhanh chóng dành cho bạn dùng gói cài đặt có đầy đủ tất thành phần cần thiết, việc cài đặt bắt đầu xây dựng ứng dụng ROR: railsintaller.org, bao gồm phần sau: Ruby Rails Bundler SQLite DevKit Git TinyTDS SQL Server Support 1.4 Công cụ phát triển Sublime Text: editor có giao diện thân thiện thông minh, hỗ trợ lập trình nhiều ngôn ngữ có Ruby (recommended). JetBrains RubyMine: IDE đầy đủ nhiên nặng cồng kềnh, nửa cộng đồng Rails sử dụng nó, có FREE cho mục đích giáo dục dự án mã nguồn mở. NetBeans: IDE tiếng, hỗ trợ tất ngôn ngữ cho dự án khác nhau, bạn cần cài plug-in cho Ruby on Rails để bắt đầu phát triển ứng dụng. Aptana Studio: IDE đầy đủ công cụ để phát triển Ruby on Rails, bạn cài đặt phiên standalone plug-in cho Eclipse. Ngoài nhiều editor IDE khác cho môi trường khác Linux, Windows, Mac. Đặc trưng Ruby on Rails 2.1 Các đặc trưng DRY – “Don’t Repeat Yourself” – không khuyến khích viết viết lại mã. COC - Convention Over Configuration – Rails tạo giả định bạn muốn làm bạn làm, thay bạn phải định tất thứ qua file cấu hình. Tạo giả định thứ mà nhà phát triển muốn bắt đầu, độc đoán, giả định cách tốt để làm việc Ví dụ: Rails định nghĩa sẵn thư mục mà bạn đặt stylesheets, images (/public), file JavaScript (/script) để biên dịch chúng thành file cached. Đây tính tuyệt vời bạn có nhiều tài nguyên JavaScript để quản lý, thừa bạn làm việc với ứng dụng nhỏ. Khi bạn tạo ứng dụng Rails mới, tự động tạo khoảng 10 thư mục cấp cao với số thư mục con, tất file .rb tạo sẵn. Nó giả sử bạn cần database. Điều Convention. Nó phức tạp bạn xây dựng site nhỏ site lớn tiện lợi. 2.2 Cấu trúc thư mục ứng dụng File/Folder Purpose app/ Chứa controllers, models, views, helpers, mailers assets ứng dụng. script/ Chứa rails script để khởi động ứng dụng, script khác để triển khai chạy ứng dụng. config/ Cấu hình runtime rules, routes, database . config.ru Cấu hình rack cho server dùng để khởi động ứng dụng. db/ Chứa database chema, migration tại. Gemfile Gemfile.lock Xác định gem cần thiết cho ứng dụng. Những file sử dụng bở Bindler gem lib/ Các module mở rộng log/ File log public/ Chứa file tĩnh asset biên dịch Rakefile Xác định vị trí nạp nhiệm vụ chạy từ cmd. File/Folder Purpose Nên thêm task vào thư mục lib/tasks thay thay đổi Rakefile RECOMMENTME.rdoc File giới thiệu ứng dụng bạn, cách cài đặt . test/ Kiểm thử đơn vị tmp/ Các file tạm thời (cache, pid, session) vendor/ Mã nguồn bên thứ 3. 2.3 Model – View – Controller RoR sử dụng mẫu kiến trúc Model – View – Controller(MVC) để tăng cường khả bảo trì phát triển ứng dụng. MVC cho phép chia ứng dụng thành tầng sử lý logic, nghiệp vụ giao diện người dùng cách rõ ràng, điều gúp cho việc kiểm thử tái sử dụng code dễ ràng hơn. 2.4 Model Tầng Model xử lý nghiệp vụ ứng dụng trực tiếp thao tác với liệu. Trong RoR, tầng model thường sử dụng để tương tác với thành phần tương ứng với chúng sở liệu validate liệu. 2.5 View Tầng view hiển thị giao diện người dùng, RoR view file HTML nhúng với đoạn mã Ruby. Các đoạn mã Ruby nhúng HTML file đơn giản, thường gồm vòng lặp lệnh điều kiện rẽ nhánh, sử dụng để thị liệu lên form view. 2.6 Controller Controller tương tác với model view. Các request đến từ trình duyệt xử lý controller, sau controller tương tác với model để lấy liệu sau trả cho view để hiển thị thông tin. Định tuyến Ruby on Rails 3.1 Giới thiệu Được định nghĩa file routes.rb Một định tuyến cung cấp ánh xạ HTTP verbs (GET, POST, PATCH/PUT, DELETE) URL đến hành động (trong controller) Theo quy ước hành động ánh xạ đến CRUD (CREATE, READ, UPDATE, DELETE) database. Ví dụ: resources :posts routes.rb tạo tuyến đường khác ứng dụng, tất ánh xạ tới Posts Controller Nếu Rails không tìm thấy posts/new template, gọi template có tên application/new (Vì PostsController kế thừa từ ApplicationController) HTTP Verb Path Action Used for GET /posts index hiển thị danh sách post GET /posts/new New/ trả HTML form để tạo post POST /posts create Tạo post GET /posts/:id show Hiện thị post GET /posts/:id/edit edit Trả HTML form để edit post PATCH/PUT /posts/:id update Update post DELETE destroy Xóa post /posts/:id 3.2 Path URL Helper Để tạo route cần dùng đến số helper Đối với resource :posts posts_path trả /posts new_post trả /posts/new edit_post_path(:id) trả /posts/:id/edit post_path(:id) trả /posts/:id Mỗi helper có _url helper tương ứng (ví dụ post_url) trả đường dẫn 3.3 Các tài nguyên lồng Thường có tài nguyên tài nguyên khác. Ví dụ, ứng dụng bạn có: class Post < ActiveRecord::Base has_many :comments end class Comment < ActiveRecord::Base belongs_to :post end route lồng cho phép bạn khai báo: resources :posts resources :comments end resources :publishers resources :posts resources :comments end 10 end Ngoài định tuyến cho posts, khai báo định tuyến comments đến CommentsController. Các URL comment gửi yêu cầu đến post: HTTP Verb Path Action Used for GET index Hiển thị tất comment post /posts/:post_id/comments GET /posts/:post_id/comments/new new trả form HTML để tạo comment post định POST /posts/:post_id/comments create tạo comment thuộc post định show hiển thị comment thuộc post định edit trả form HTML để edit comment thuộc post định update update comment định thuộc post định destroy xóa comment định thuộc post định GET GET PATCH/PU T DELETE /posts/:post_id/comments/:id /posts/:post_id/comments/:id/edit /posts/:post_id/comments/:id /posts/:post_id/comments/:id 3.4 Tạo Path URL từ Object Rails tạo đường dẫn URL từ mảng tham số. Ví dụ, bạn có route sau: 11 resources :posts resources :comments end Khi sử dụng post_comment_path, bạn truyền vào instance Post Comment thay ID: Bạn sử dụng url_for với object, Rails tự động xác định bạn muốn route nào: Trong trường hợp Rails xem @post Post @comment Comment, sử dụng post_comment_path helper. Đối với hành động khác, cần thêm action làm phần tử mảng: Active Record gì? Active Record thành phần quan trọng Framework Rails cho phép điều khiển tương tác qua lại ứng dụng với DB phần trung tâm Rails. Sử uyển chuyển Active Record giúp cho nhiều việc thiết lập cấu hình ứng dụng. Active Record mô hình MVC: tầng Model hệ thống, chịu trách nhiệm đại diện cho business data logic. Nó thuận tiện cho việc tạo sử dụng business object lưu trữ DB. Là bổ sung cho Active Record Pattern. Trong Active Record , đối tượng mang liệu hành vi hoạt động liệu đó, đảm bảo việc truy cập liệu cách logic, phần đối tượng dạy cho người dùng làm để đọc ghi liệu DB. Vì thế, Active Record xem công cụ mạnh mẽ hữu dụng. Thông qua Active Record, bạn không cần phải khai báo Primary Key hay Foreign 12 Key xây dựng DB, việc liên kết bảng có Active Record trợ giúp. Khi có thay đổi, ta không cần phải thao tác với SQL mà cần thông qua ngôn ngữ Ruby. Object Relational Mapping (ORM) ORM chế cho phép bạn xây dựng ứng dụng (cụ thể OOP-hướng đối tượng) mà thao tác table database đóng gói lại business class (vd: table Users tương ứng với class User), quan tâm nhiều đến việc viết query cho lần truy xuất DB. Kỹ thuật ORM thích hợp môi trường phát triển hệ thống website mà cần tham gia nhiều thành viên nhóm code cho hệ thống quy mô Enterprise. Với ORM, bạn sử dụng với nhiều hệ quản trị sở liệu khác nhau, độc lập hoàn toàn, thường ORM thị trường hỗ trợ nhiều hệ quản trị sở liệu khác nhau, bạn cần thay đổi driver tương tác làm việc cách nhanh chóng mà không cần phải thay đổi dòng code nào. Một mạnh ORM, bạn thao tác truy cập, xử lý database cách dễ dàng nhanh chóng. So với cách thông thường bạn phải sử dụng câu lệnh SQL để truy vấn xử lý liệu. Nhưng với ORM, bạn không 13 cần phải sử dụng SQL, mà cần thao tách, sử dụng API đơn giản dễ dùng để truy vấn lý liệu Với ORM Framework, bạn không cần dùng SQL để thao tác liệu, để làm việc với database? Đó tự động gen câu lệnh SQL Insert, Update, Delete, Select liệu bên database, nên bạn khó không can thiệp vào để tối ưu hơn. Tuy nhiên ORM Framework hỗ trợ bạn gọi câu lệnh SQL trực tiếp tình cần thiết. Ngoài bạn phải gặp nhiều tình nan giải mà làm việc với ORM phải gặp qua: cách thức quản lý session truy xuất ORM – bạn làm việc với Web project, lazy loading, tình load toàn database lên không thiết kế cách… Và hệ thống bạn làm việc cách ì ạch. Active Record ORM Framework Active Record cung cấp cho chế, quan trọng khả năng: • Đại diện cho model liệu chúng • Đại diện cho liên kết model • Đại diện cho phân cấp kế thừa thông qua mô hình quan hệ • Kiểm tra tính hợp lệ của model trước chúng tồn DB • Thực hoạt động sở liệu cách hướng đối tượng Quy ước cấu hình Active Record 7.1 Quy ước đặt tên Active Record sử dụng quy ước đặt tên để tìm hiểu cách thức ánh xạ models bảng DB: - Tên bảng dạng số nhiều tên model. - Nếu tên model bao gồm nhiều từ (viết hoa ký tự từ) tên bảng tương ứng chứa từ cách dấu gạch dưới. Ví dụ: 14 Model / Class Table / Schema Post posts LineItem line_items Deer deers Mouse mice Person people 7.2 Quy ước lược đồ (schema) Active Record sử dụng quy ước đặt tên cột bảng sở liệu tùy thuộc vào mục đích cột này. Foreign Key: cột đặt tên theo mô hình. Active Record sử dụng cột để tạo liên kết bảng DB Primary Key: mặc định Active Record sử dụng cột số nguyên tên ID khóa bảng. Khi sử dụng Active Record Migration để tạo bảng, cột tự động tạo ra. Ngoài số tên cột tùy chọn thêm tính Active Record: Create_at: tự động thiết lập ngày thời gian ghi ghi lần đầu tiên. Update_at: tự động thiết lập ngày thời gian ghi cập nhật. Thao tác với Model Chúng ta cần sử dụng đến Object model Active Record. Để tạo model, ta sử dụng dòng lệnh cmd: rails generate model Product Rails tự động tạo cho ta Object model app/models/product.rb. Lúc này, sử dụng chức tích hợp sẵn Schema Migration ta không cần sử dụng scrip SQL mà làm việc độc lập DB Schema, làm 15 giảm thiểu thao tác với DB mà không làm liệu sau lần thay đổi Schema. Để sử dụng Schema Migration, ta thay đổi nội dung tập tin db\migrate\*_create_products.rb class CreateProducts < ActiveRecord::Migration def self.up create_table :products |t| t.string :title t.text :description t.string :image_url t.decimal :price t.timestamps end end def self.down drop_table :products end end Để thực thi gõ câu lệnh: rake db:migrate Active Record khởi tạo table: schema_info products. Trong table schema_info ghi lại verson tập tin migration giúp quản lý mã tạo đồng thời giữ thông tin lưu. Console Rails Là tiện ích kèm với ứng dụng Rails, cho phép làm việc với model liên kết với DB. Khi khởi động console, Rails thực bước: • Rails liên kết với DB • Rails tải class Active Record app/model • Rails cho phép thao tác với model Để khởi động Rails console, sử dụng lệnh: rails console Thêm thông tin vào CSDL: 16 Photo = Photo.new Photo.filename = “rails.jpg” Photo.save 10 Cơ sở liệu Rails Những kiến thức liên quan đến sở liệu Rails: • Column Các khái niệm liên quan đến name, type, primary, .giống ngôn ngữ SQL • Accessors Để thao tác với cột DB, ta cần gọi accessor photo.filename. Với chức này, Rails giúp thao tác tìm kiếm CSDL dễ dàng hơn. • Id Thuộc tính ID thuộc tính đặc biệt Active Record cột có Primary Key dành cho table CSDL. Active Record tự tạo cột ID Primary Key dựa vào cột ID • Method 17 Method Find_by_ Find_by__and_ Attribute Active Record Active Record thêm method vào class sử dụng cột CSDL. Ví dụ: thêm find_by_id, find_by_name vào class tương ứng với table Active Record thêm giống tổ hợp dạng Person.find_by_name_and_find_by_email Active Record tạo attribute với nhiều method. Ví dụ table photos có attribute filename => photo.filename = rails.jpg • Finder Active Record thêm vào Finder dùng để làm công cụ tìm kiếm liệu dạng find_by_ vào class Model cho cột table Ví dụ: tìm tập tin rails.jp table photos (class Photo) xóa tập tin đó, ta sử dụng sau console Rails: photo.find_by_filename(“rails.jpg”).destroy • Validate Active Record dùng để kiểm tra liệu. Chẳng hạn, muốn kiểm tra liệu có filename hay không, ta thay đổi tập tin app/model/photo.rb sau: class Photo < ActiveRecord::Base validate_presence_of :filename end Kiểm tra tính hợp lệ liệu đầu vào: class Product < ActiveRecord::Base attr_accessible :description, :image_url, :price, :title validates :title, :description, :image_url, :presence => true validates :price, :numericality => {:greater_than_or_equal_to => 0.01} validates :title, :uniqueness => true validates :image_url, :format => { :with => %r{\.(gif|jpg|png)$}i, :message => 'must be a URL for GIF, JPG or PNG image.' 18 } end • Validation Active Record cho phép kiểm tra trạng thái model trước viết vào DB Các method: kiểm tra rỗng, tính nhất, DB 11 Quản lý Relation với Active Record Quản lý relation công việc quan trọng Framework làm nâng cao hiệu suất làm việc giúp cho người dùng dễ dàng tìm kiếm thông tin cần thiết cách nhanh chóng. Active Record lấy phần ngôn ngữ Ruby sử dụng cách đặt tên theo chuẩn làm đơn giản hóa việc tương tác table với CSDL. Cú pháp sử dụng có dạng: Relation :asociation :option1 => value, :option2 => value • Relation: method xác định Active Record để tạo relation table • Association(s): hiểu ký hiệu đặc biệt dành cho relation tạo • Option: method sử dụng Ruby, relation có nhiều option Ví dụ: has_many: Là quan hệ - nhiều class Post > Active Record::Base has_many :comment :order => time belongs_to: Là quan hệ nhiều - một. Ví dụ bảng post có quan hệ nhiều – với bảng comment, post chứa nhiều comment. class Comment < ActiveRecord::Base 19 belongs_to :post end has_One: Là quan hệ – một. Ví dụ: Mỗi hình ảnh table Photo ứng với đường dẫn tập tin table File class Photo < ActiveRecord::Base has_one :file end has_and_belongs_to_many: Là quan hệ nhiều – nhiều (n-m). Ví dụ : có bảng photo category. Mỗi category chứa nhiều photo khác photo thuộc nhiều category khác class Photo < ActiveRecord::Base has_and_belongs_to_many :categories end class Category < ActiveRecord::Base has_and_belongs_to_many :photos end Join: Rails cho phép kết nối liệu table để tìm kiếm thông tin sở liệu thông qua phép join table với nhau. Ta sử dụng cặp has_many belongs_to thông qua từ khóa through. Ví dụ: liên kết table slideshow photo thông qua table slide class Slideshow < ActiveRecord::Base 20 has_many :photo through => :silde end 12 CRUD – đọc ghi liệu CRUD viết tắt toán tử: Create, Read, Update, Delete. Active Record tự động tạo phương thức cho phép ứng dụng đọc thao tác với liệu bảng. 12.1 Create Cho model User với thuộc tính name occupation. Phương thức create gọi tạo lưu ghi vào CSDL. user = User.create(name: "David", occupation: "Code Artist") sử dụng phương thức new: user = User.new user.name = "David" user.occupation = "Code Artist" user.save 12.2 Read Một số ví dụ phương thức truy cập liệu cung cấp Active Record: # return a collection with all users users = User.all # return the first user user = User.first # return the first user named David david = User.find_by(name: 'David') # find all users named David who are Code Artists and sort by created_at in reverse chronological order users = User.where(name: 'David', occupation: 'Code Artist').order('created_at DESC') 21 12.3 Update Khi đối tượng truy xuất, thuộc tính sửa đổi lưu vào CSDL. user = User.find_by(name: 'David') user.name = 'Dave' user.save user = User.find_by(name: 'David') user.update(name: 'Dave') Để update lượng lớn ghi, bạn sử dụng phương thức update_all: User.update_all "max_login_attempts = 3, must_change_password = 'true'" 12.4 Delete user = User.find_by(name: 'David') user.destroy 13 Active Record Migrations Migrations tính cua Active Record cho phép bạn phát triển giản đồ sở liệu theo thời gian. Thay sửa đổi lược đồ quan hệ SQL, Migrations cho phép sử dụng dễ dàng Ruby DSL để mô thay đổi bảng. Tạo Migration sử dụng câu lệnh: rails generate migration [: : .] Ví dụ: Để tạo bảng Products với trường title, description, image_url, price gõ câu lệnh: $ rails generate migration products title :string description :string image_url :string price :decimal Hoặc truy cập file db/migrate/*create_products.rb sửa nội dung: class CreateProducts < ActiveRecord::Migration def change create_table :products |t| t.string :title t.string :description t.string :image_url t.decimal :price 22 t.timestamps end end end Nếu tên Migration có dạng “AddXXXToYYY” or “RemoveXXXFromYYY” theo sau danh sách cột kiểu Migration chứa câu lệnh add_column remove_column tạo ra. $ rails generate migration AddPartNumberToProducts part_number:string Sẽ tạo ra: class AddPartNumberToProducts < ActiveRecord::Migration def change add_column :products, :part_number, :string add_index :products, :part_number end end rails generate migration RemovePartNumberFromProducts part_number:string Sẽ tạo ra: class RemovePartNumberFromProducts < ActiveRecord::Migration def change remove_column :products, :part_number, :string end end Nếu tên Migration có dạng “CreateXXX” theo sau danh sách cột kiểu Migration tạo bảng XXX chứa cột tạo rails generate migration CreateProducts name:string part_number:string Tạo ra: class CreateProducts < ActiveRecord::Migration def change create_table :products |t| t.string :name 23 t.string :part_number end end end 14 Giới thiệu Scaffolding Scaffolding công cụ mạnh mẽ giúp khởi tạo cách nhanh chóng giao diện người dùng, sử dụng bước khởi đầu đầy lợi cho việc phát triển ứng dụng. Dòng lệnh để tạo Scaffold: rails generate scaffold Khi sử dụng Scaffold, Rails tự động tạo controller có tên theo kiểu tên số nhiều model thêm vào controller method sau: Method Chức index Hiển thị trang chủ, view liên kết với CSDL new HIển thị mọt view tạo liệu edit(id) Chỉnh sửa liệu show(id) Hiển thị kết tập liệu create Tạo liệu update(id) Cập nhật liệu destroy Xóa liệu 15 Đánh giá Vì Rails xây dựng Ruby nên kế thừa điểm mạnh điểm yếu ngôn ngữ này. Ruby ngôn ngữ script với cú pháp sáng ,dễ đọc, dễ hiểu ngôn ngữ hướng đối tượng. Vì ngôn ngữ thông dịch nên chạy chậm ngôn ngữ biên dịch khác nhứ Java,C++ hay C. Trong nhiều trường hợp, khác biệt chút tốc độ vấn đề đáng bận tâm mà ứng dụng web phục vụ hàng triệu người dùng thời điểm vấn đề hiệu lại đề sống còn. Ruby không phù hợp cho ứng dụng đòi hỏi hiệu cao xây dựng không dùng cho việc tối ưu hóa tốc 24 độ, thiết kế với mục đích đơn giản hóa, dễ sử dụng, phát triển ứng dụng cách nhanh chóng. Ruby không hỗ trợ tốt thread, giống ngôn ngữ script khác, Ruby gặp khó khăn giải tiến trình có thời gian sống lâu, ngôn ngữ Java , C# hỗ trợ Thread tốt chúng tối ưu hóa trình xử lý thread nhiều năm liền, điểm yếu khác vấn đề quản lý nhớ, thu gom rác Ruby hoạt động không tốt thu gom rác Java, với Ruby,thậm chí nhớ khái niệm vùng nhớ Heap, Stack nên việc giải phóng nhớ chậm ngôn ngữ khác Java, C,C++. Một điều nữa, việc Rails hỗ trợ cho nhà phát triển nhiều bắt ứng dụng phải tuần theo quy ước mô hình MVC, theo ý nghĩa tên Framework “on rails way” gây mặt trái nó, khó khăn phát triển tiếp ứng dụng mà xây dựng ngôn ngữ khác, với sở liệu có trước , với mô hình khác RoR. Mặc dù có vài điểm yếu, phải thừa nhận điểm mạnh mà RoR có framework khác không, kiến trúc RoR chấp nhận hi sinh mềm dẻo khai báo file cấu hình viêc tuân theo quy ước nhằm tận dụng khả hỗ trợ từ Framework, RoR phù hợp cho việc phát triển từ đầu ứng dụng vừa nhỏ, yêu cầu thời gian phát triển ngắn dễ bảo trì, dễ đọc hiểu, không đòi hỏi hiệu cao. 25 16 Demo ứng dụng 16.1 Blog 16.2 Cửa hàng sách trực tuyến 26 [...]... 9 Console Rails Là một tiện ích đi kèm với mỗi ứng dụng Rails, cho phép làm việc với các model được liên kết với DB Khi khởi động console, Rails sẽ thực hiện các bước: • Rails liên kết với DB • Rails tải các class Active Record trong app/model • Rails cho phép thao tác với model Để khởi động Rails console, sử dụng lệnh: rails console Thêm thông tin vào CSDL: 16 Photo = Photo.new Photo.filename = rails. jpg”... table với nhau trong CSDL Cú pháp sử dụng có dạng: Relation :asociation :option1 => value, :option2 => value • Relation: là một method được xác định bởi Active Record để tạo relation giữa các table • Association(s): được hiểu như một ký hiệu đặc biệt dành cho mỗi relation được tạo • Option: cũng như mọi method được sử dụng trong Ruby, mỗi relation đều có thể có một hoặc nhiều option Ví dụ: has_many:... gian Thay vì sửa đổi trong lược đồ quan hệ SQL, Migrations cho phép sử dụng dễ dàng Ruby DSL để mô sự thay đổi trên các bảng Tạo một Migration sử dụng câu lệnh: rails generate migration [: : ] Ví dụ: Để tạo 1 bảng Products với các trường title, description, image_url, price gõ câu lệnh: $ rails generate migration products title :string description :string image_url... :order => time belongs_to: Là quan hệ nhiều - một Ví dụ bảng post có quan hệ nhiều – một với bảng comment, vì một post có thể chứa nhiều comment class Comment < ActiveRecord::Base 19 belongs_to :post end has_One: Là quan hệ một – một Ví dụ: Mỗi một hình ảnh trong table Photo ứng với một đường dẫn tập tin trong table File class Photo < ActiveRecord::Base has_one :file end has_and_belongs_to_many: Là... Photo.save 10 Cơ sở dữ liệu trong Rails Những kiến thức liên quan đến cơ sở dữ liệu trong Rails: • Column Các khái niệm liên quan đến name, type, primary, giống như ngôn ngữ SQL • Accessors Để thao tác với các cột trong 1 DB, ta chỉ cần gọi accessor như photo.filename Với chức năng này, Rails sẽ giúp thao tác tìm kiếm CSDL dễ dàng hơn • Id Thuộc tính ID là một thuộc tính đặc biệt trong Active Record vì mỗi... dụng dòng lệnh trong cmd: rails generate model Product Rails sẽ tự động tạo ra cho ta một Object của model trong app/models/product.rb Lúc này, nếu sử dụng chức năng tích hợp sẵn của Schema Migration thì ta sẽ không cần sử dụng scrip SQL mà sẽ làm việc độc lập giữa DB và Schema, làm 15 giảm thiểu thao tác với DB mà không làm mất dữ liệu sau mỗi lần thay đổi Schema Để sử dụng Schema Migration, ta thay đổi... được tổ hợp dưới dạng như Person.find_by_name_and_find_by_email Active Record tạo 1 attribute với nhiều method Ví dụ trong table photos có attribute filename => photo.filename = rails. jpg • Finder Active Record đã thêm vào 1 Finder dùng để làm công cụ tìm kiếm dữ liệu dưới dạng find_by_ vào mỗi class Model cho các cột trong table Ví dụ: tìm tập tin rails. jp trong table photos (class Photo)... của model trước khi viết vào trong DB Các method: kiểm tra rỗng, tính duy nhất, không có trong DB 11 Quản lý Relation với Active Record Quản lý các relation là một trong những công việc quan trọng đối với mọi Framework làm nâng cao hiệu suất làm việc giúp cho người dùng dễ dàng tìm kiếm được thông tin cần thiết một cách nhanh chóng Active Record lấy một phần của ngôn ngữ Ruby và sử dụng cách đặt tên... ActiveRecord::Migration def change create_table :products do |t| t.string :title t.string :description t.string :image_url t.decimal :price 22 t.timestamps end end end Nếu như tên của Migration có dạng “AddXXXToYYY” or “RemoveXXXFromYYY” và theo sau đó là một danh sách các cột và kiểu thì một Migration chứa các câu lệnh add_column và remove_column được tạo ra $ rails generate migration AddPartNumberToProducts... và là bộ phần trung tâm của Rails Sử uyển chuyển của Active Record giúp cho chúng ta rất nhiều trong việc thiết lập cấu hình ứng dụng Active Record trong mô hình MVC: là tầng Model của hệ thống, chịu trách nhiệm đại diện cho business data và logic Nó thuận tiện cho việc tạo và sử dụng các business object được lưu trữ trong DB Là 1 sự bổ sung cho Active Record Pattern Trong Active Record , các đối tượng . PHẦN MỀM RUBY ON RAILS NGUYỄN NHẬT TÂN, NGUYỄN VĂN CƯỜNG, TRẦN MINH THẮNG 26/11/2013 Mục lục 1 Giới thiệu Ruby on Rails 4 1.1 Tại sao gọi là Ruby on Rails? 4 1.2 Một số Website dùng Ruby on Rails. Migrations 22 14 Giới thiệu về Scaffolding 24 15 Đánh giá 24 16 Demo ứng dụng 26 16.1 Blog 26 16.2 Cửa hàng sách trực tuyến 26 3 1 Giới thiệu Ruby on Rails 1.1 Tại sao gọi là Ruby on Rails? Ruby on. Mac. 2 Đặc trưng của Ruby on Rails 2.1 Các đặc trưng cơ bản DRY – “Don’t Repeat Yourself” – không khuyến khích viết đi viết lại mã. COC - Convention Over Configuration – Rails tạo những giả định