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
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
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:
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
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
Code:
ftp://download.fedora.redhat.com/pub/fedora/linux/updates/7/SRPMS/rubygems-0.9.4-1.fc7.src.rpm
Kế tiếp là một số gem tối thiểu cần thiết cho web development
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
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
Code:
rails <project_name>
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:
Code:
#user.rb
class User < ActiveRecord::Base

end
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:
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
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
Code:
....
   #my_pet is a Pet
   #me is a User
   my_pet.user = me
   my_pet.save
....
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
3do viết 02:27 ngày 10/10/2018
good job
vtnphong viết 02:28 ngày 10/10/2018
hihi, hay quá
thailehuy viết 02:19 ngày 10/10/2018
JSP hay Servlet thì nghe nói là Struts là framework khá ngon lành đấy, còn có được như RoR hay không thì ... chưa xài bao giờ chưa biết
Kevin viết 02:20 ngày 10/10/2018
Sau khi RoR nổi đình nổi đám, thì Java, PHP cũng đều có những framework tương tự ! Trong Java có phiên bản Ruby gọi là JRuby cũng suport luôn Rails. Đặc biệt có ngôn ngữ động Groovy , cùng với framework của nó là Grails cũng khá hay, cú pháp đơn giản nhưng quen thuộc với dân Java, C/C++ hơn ! Trang chủ của nó đây : http://grails.org/ . Tui cũng từng thử qua, có ghi lại vài bước trên blog, các bạn xem tham khảo : http://cndkhuong.blogspot.com/2007/0...-ngh-java.html

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
kxd viết 02:21 ngày 10/10/2018
Nghe nói Java có cái Spring Framework gì gì đó. Nhưng ko biết xài thế nào
ndgiang84 viết 02:13 ngày 10/10/2018
------------------------------------
cái nick đó viết 02:16 ngày 10/10/2018
đơn giản và dễ hiểu, tớ sẽ thử liền
cái nick đó viết 02:28 ngày 10/10/2018
mà hình như bác chưa nói về 1 thứ cực kì basic là cài cái web server nào để chạy các ứng dụng Ruby, cần một cái "Hello world" đầu tiên đó bác
1650km.com viết 02:14 ngày 10/10/2018
Được gửi bởi vtnphong
hihi, hay quá
Ủh, ông anh này cùng team đó mà, khen nhau chi vậy chời. Lại PR cái trang của ông anh nữa à.

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
Bài liên quan
0