10/10/2018, 00:12
Ruby on Rails - Mỗi ngày một chuyện
Trước tiên giới thiệu một chút về bản thân mình nhé: Mình mới ra trường hơn 1 năm thôi, và đã sử dụng RoR khoảng hơn 6 tháng một chút. Cũng như hầu hết các bạn mới bắt đầu, mình gặp vô khối chuyện linh tinh từ nhỏ đến lớn với RoR.
Mình lập thread này là để chia sẻ những kinh nghiệm của mình, và cũng mong các bạn có kinh nghiệm đóng góp các kinh nghiệm của các bạn trong việc sử dụng RoR cho việc lập trình web.
Mình học RoR theo cách không chính quy, tức là học theo nhu cầu, công việc cần tới đâu mình học tới đó, nên các kinh nghiệm của mình hơi linh tinh không theo sách vở gì cả, hơn nữa mình cũng chưa phải là expert hay pro gì (nếu chỉ sử dụng RoR hơn 6 tháng mà thành expert được thì tốt quá ) nên có gì các bạn cứ góp ý thẳng thắn.
Nói thêm là hiện nay mình sử dụng Linux, nhiều ví dụ trong các bài viết sau sẽ dùng từ website của team mình là www.yup.vn, đồng thời do yêu cầu công việc phải sử dụng tiếng Anh nên có thể mình sẽ chêm tiếng Anh khá nhiều vào bài viết, mong các bạn thông cảm.
Các bài viết sẽ theo thứ tự thời gian từ lúc mình là 1 newbie 100% cho tới hiện nay, vì vậy các bạn có kinh nghiệm rồi sẽ thấy các bài đầu tiên hơi thừa thãi
++Chuẩn bị++
Để setup RoR trong máy của bạn, cách dễ dàng nhất vẫn là trực tiêp theo hướng dẫn của trang chủ RoR tại đây http://www.rubyonrails.org/down nếu bạn sử dụng windows hay mac.
Nếu bạn dùng Linux, bạn sẽ cần install các package: ruby ruby-devel ruby-libs ruby-irb ruby-rdoc
tùy vào phiên bản linux bạn sử dụng.
Tiếp đến các bạn cần có ruby gem để kiểm soát các gem thư viện của ruby.
Với windows:
Với Linux:bạn có thể tìm RPM của rubygems tương ứng với version của mình, ví dụ với fedora và centos bạn có thể sử dụng file sau
Kế tiếp là một số gem tối thiểu cần thiết cho web development
Hiện nay Rails đã ra tới version 2.0, tuy nhiên version này còn mới nên chưa bảo đảm tính ổn định nên mình vẫn xài 1.2.6
Về IDE cho việc phát triển, hiện tại mình đang sử dụng NetBeans với ruby extension, vì NetBeans có tích hợp cả SVN, tuy nhiên bạn vẫn có thể sử dụng một số IDE khác như Aptana với ruby extension (cho cả windows và linux) hay Radrails (cho windows)
Vậy là xong, bạn đã sẵn sàng cho việc phát triển web với RoR
++Bước đầu++
Bạn có thể dùng IDE để tạo project, hoặc tạo trực tiếp từ command line (khuyến khích dùng command line, vì sau này còn nhiều đất dụng võ ). Tại folder bạn muốn tạo project, chạy
Và rails sẽ tạo ra sẵn một khung sườn project cho bạn, bao gồm rất nhiều folder và một số file nữa.
Các folder mình nghĩ cần chú ý là:
-/app/models: chứa các object class của bạn
-/app/views: chứa các file giao diện rhtml hay rjs cho project của bạn
-/app/helpers: chứa các function hỗ trợ cho view
-/app/controllers: chứa các class quản lý object, và thực hiện các chức năng của system của bạn
-/db: chứa các file giúp bạn khởi tạo database. Không như nhiều framework khác, Rails sẽ quản lý phần lớn database cho bạn, tất cả những gì bạn cần là nói cho Rails biết phải quản lý như thế nào
-/lib: chứa các module mà sau này bạn sẽ viết thêm. Lợi thế của các module này là có thể được gọi từ bất cứ đâu, không giống như helper chỉ có thể được gọi từ view, và controller chỉ có thể được gọi từ controller
-/public: chứa các file ảnh, CSS và javascripts nếu bạn cần
-/vendor: chứa các plugin cho rails nếu bạn cần sử dụng, chúng sẽ được install vào đây
Nếu bạn đã biết về MVC thì có lẽ các khái niệm trên không xa lạ lắm với bạn
RoR thường được nhắc tới với khái niệm "Convention over Configuration", tức là thay vì phải thiết lập môi trường hay những gì đại loại như vậy, tất cả những gì bạn cần là gọi cho đúng tên
Ví dụ: bạn có một class gọi là User (từ nay mình sẽ gọi là model, theo RoR) thì file model của class này sẽ được RoR "nghĩ" là có tên là /models/user.rb (tất nhiên bạn vẫn có thể đặt tên khác nếu thích), và controller của model này sẽ mặc đinh được hiểu là /controllers/user_controller.rb (tất nhiên, bạn vẫn có thể đặt tên khác nếu thích) và helper của model này sẽ là /helpers/user_helper.rb, các view của model sẽ được đặt trong thư mục /views/users, và điều tuyệt nhất của Rails là: table dưới database chứa các dữ liệu về user sẽ được "hiểu" là table 'users', bạn không cần phải thiết lập bất cứ binding nào như với VB hay .NET
Tất nhiên đi đôi với cái lợi đấy có cái hại là nếu bạn gọi sai tên thì tất cả đều không chạy
Các model sẽ được định nghĩa như sau:
Kí hiệu '< ActiveRecord::Base' có nghĩa là model này sẽ inherit lại ActiveRecode::Base, đây là class cơ bản nhất của RoR, chứa rất nhiều các function cơ bản cho phép bạn xử lý database cũng như relationship giữa các model khác nhau, và còn vô khối thứ khác mà mình cũng không biết hết
Relationship của các model thường sẽ được định nghĩa như sau:
Mình nghĩ không cần giải thích gì thêm, ngoài chuyện bạn có thấy RoR sử dụng ngôn ngữ gần giống với tiếng Anh thông dụng không ?
Và vì Rails đã quản lý hầu hết database cho bạn, tất cả những gì bạn cần là thiết lập các table cho đúng.
Ví dụ, trong table 'pets' chúng ta sẽ phải có 1 column tên là 'user_id' (theo đúng convention của RoR) thì RoR sẽ hiểu 'user_id' chính là foreign key của table 'users' trong table 'pets'. Từ đó, chúng ta có thể làm như sau trong code
Khi đó RoR sẽ tự tìm và update column 'user_id' tương ứng với record 'my_pet' bằng id của record 'me'
Vì RoR hoạt động trên cơ chế như vậy, cho nên có một số chữ bạn không được phép sử dụng cho tên của class, controller hay function, như liệt kê tại link sau
http://wiki.rubyonrails.com/rails/pages/ReservedWords
Xin phép tạm dừng tại đây, mai viết tiếp, chủ đề có lẽ sẽ là validate model, model function và class function
Mình lập thread này là để chia sẻ những kinh nghiệm của mình, và cũng mong các bạn có kinh nghiệm đóng góp các kinh nghiệm của các bạn trong việc sử dụng RoR cho việc lập trình web.
Mình học RoR theo cách không chính quy, tức là học theo nhu cầu, công việc cần tới đâu mình học tới đó, nên các kinh nghiệm của mình hơi linh tinh không theo sách vở gì cả, hơn nữa mình cũng chưa phải là expert hay pro gì (nếu chỉ sử dụng RoR hơn 6 tháng mà thành expert được thì tốt quá ) nên có gì các bạn cứ góp ý thẳng thắn.
Nói thêm là hiện nay mình sử dụng Linux, nhiều ví dụ trong các bài viết sau sẽ dùng từ website của team mình là www.yup.vn, đồng thời do yêu cầu công việc phải sử dụng tiếng Anh nên có thể mình sẽ chêm tiếng Anh khá nhiều vào bài viết, mong các bạn thông cảm.
Các bài viết sẽ theo thứ tự thời gian từ lúc mình là 1 newbie 100% cho tới hiện nay, vì vậy các bạn có kinh nghiệm rồi sẽ thấy các bài đầu tiên hơi thừa thãi
++Chuẩn bị++
Để setup RoR trong máy của bạn, cách dễ dàng nhất vẫn là trực tiêp theo hướng dẫn của trang chủ RoR tại đây http://www.rubyonrails.org/down nếu bạn sử dụng windows hay mac.
Nếu bạn dùng Linux, bạn sẽ cần install các package: ruby ruby-devel ruby-libs ruby-irb ruby-rdoc
Code:
Ví dụ: yum install ruby ruby-devel ruby-libs ruby-irb ruby-rdoc hoặc: apt-get install ruby ruby-devel ruby-libs ruby-irb ruby-rdoc
Tiếp đến các bạn cần có ruby gem để kiểm soát các gem thư viện của ruby.
Với windows:
Code:
download rubygems tại đây: http://rubyforge.org/frs/?group_id=126 Giải nén, vào thư mục vừa giải nén ra và chạy lệnh: ruby setup.rb
Code:
ftp://download.fedora.redhat.com/pub/fedora/linux/updates/7/SRPMS/rubygems-0.9.4-1.fc7.src.rpm
Code:
gem install rake -v 0.7.3 --include-dependencies gem install rails -v 1.2.6 --include-dependencies gem install mongrel -v 1.1.1 --include-dependencies
Về IDE cho việc phát triển, hiện tại mình đang sử dụng NetBeans với ruby extension, vì NetBeans có tích hợp cả SVN, tuy nhiên bạn vẫn có thể sử dụng một số IDE khác như Aptana với ruby extension (cho cả windows và linux) hay Radrails (cho windows)
Vậy là xong, bạn đã sẵn sàng cho việc phát triển web với RoR
++Bước đầu++
Bạn có thể dùng IDE để tạo project, hoặc tạo trực tiếp từ command line (khuyến khích dùng command line, vì sau này còn nhiều đất dụng võ ). Tại folder bạn muốn tạo project, chạy
Code:
rails <project_name>
Các folder mình nghĩ cần chú ý là:
-/app/models: chứa các object class của bạn
-/app/views: chứa các file giao diện rhtml hay rjs cho project của bạn
-/app/helpers: chứa các function hỗ trợ cho view
-/app/controllers: chứa các class quản lý object, và thực hiện các chức năng của system của bạn
-/db: chứa các file giúp bạn khởi tạo database. Không như nhiều framework khác, Rails sẽ quản lý phần lớn database cho bạn, tất cả những gì bạn cần là nói cho Rails biết phải quản lý như thế nào
-/lib: chứa các module mà sau này bạn sẽ viết thêm. Lợi thế của các module này là có thể được gọi từ bất cứ đâu, không giống như helper chỉ có thể được gọi từ view, và controller chỉ có thể được gọi từ controller
-/public: chứa các file ảnh, CSS và javascripts nếu bạn cần
-/vendor: chứa các plugin cho rails nếu bạn cần sử dụng, chúng sẽ được install vào đây
Nếu bạn đã biết về MVC thì có lẽ các khái niệm trên không xa lạ lắm với bạn
RoR thường được nhắc tới với khái niệm "Convention over Configuration", tức là thay vì phải thiết lập môi trường hay những gì đại loại như vậy, tất cả những gì bạn cần là gọi cho đúng tên
Ví dụ: bạn có một class gọi là User (từ nay mình sẽ gọi là model, theo RoR) thì file model của class này sẽ được RoR "nghĩ" là có tên là /models/user.rb (tất nhiên bạn vẫn có thể đặt tên khác nếu thích), và controller của model này sẽ mặc đinh được hiểu là /controllers/user_controller.rb (tất nhiên, bạn vẫn có thể đặt tên khác nếu thích) và helper của model này sẽ là /helpers/user_helper.rb, các view của model sẽ được đặt trong thư mục /views/users, và điều tuyệt nhất của Rails là: table dưới database chứa các dữ liệu về user sẽ được "hiểu" là table 'users', bạn không cần phải thiết lập bất cứ binding nào như với VB hay .NET
Tất nhiên đi đôi với cái lợi đấy có cái hại là nếu bạn gọi sai tên thì tất cả đều không chạy
Các model sẽ được định nghĩa như sau:
Code:
#user.rb class User < ActiveRecord::Base end
Relationship của các model thường sẽ được định nghĩa như sau:
Code:
#user.rb class User < ActiveRecord::Base #1-many relationship has_many :pets #1-1 relationship has_one :room #many-1 relationship belongs_to :family #many-many relationship has_many_and_belongs_to :groups end
Và vì Rails đã quản lý hầu hết database cho bạn, tất cả những gì bạn cần là thiết lập các table cho đúng.
Ví dụ, trong table 'pets' chúng ta sẽ phải có 1 column tên là 'user_id' (theo đúng convention của RoR) thì RoR sẽ hiểu 'user_id' chính là foreign key của table 'users' trong table 'pets'. Từ đó, chúng ta có thể làm như sau trong code
Code:
.... #my_pet is a Pet #me is a User my_pet.user = me my_pet.save ....
Vì RoR hoạt động trên cơ chế như vậy, cho nên có một số chữ bạn không được phép sử dụng cho tên của class, controller hay function, như liệt kê tại link sau
http://wiki.rubyonrails.com/rails/pages/ReservedWords
Xin phép tạm dừng tại đây, mai viết tiếp, chủ đề có lẽ sẽ là validate model, model function và class function
Bài liên quan
Ngoài ra còn vài cái framework tương tự Rails trong Java, bạn search sẽ thấy rất nhiều ! Bản thân tui cũng thích cái syntax của Groovy lắm ! He he
Nói vây thôi chứ cái RoR cực mạnh đấy, là ngôn ngữ của tương lai, mình cũng có coi qua, nó vẽ mấy cái 3D cực tuyệt