Bắt đầu với Ruby on Rails: Giá mà tôi biết trước

Dưới đây là bài viết của tác giả Kalid Azad từ trang web betterexplained.com, bạn có thể tìm thấy bài gốc tại đây. Hi vọng sau bài viết này các bạn sẽ có một cái nhìn tổng quát hơn về framework Rails trong việc ứng dụng phát triển web. Happy coding.

Ruby on Rails cách thanh lịch, gọn gàng và thú vị trong việc phát triển các ứng dụng web. Tuy nhiên việc tìm hiểu Rails từ đầu đôi khi cũng là một thách thức với các lập trình viên mới. Tôi đã có một số dự án làm việc với framework rails, nên sau đây tôi sẽ chia sẻ cho các bạn một số kinh nghiệm tôi thu được khi mới bắt đầu tìm hiểu về Rails.

Công cụ: Just Get Them

Dưới đây là một số công cụ mà bạn sẽ cần. Đừng đọc hết những review rồi mới quyết định cái nào là tốt nhất, cứ chọn lấy một cái nào đó và học thôi.

Thế chính xác chúng là cái gì?

“Ruby on Rails” trông thì có vẻ bắt mắt, cơ mà nhiều khi vẫn gây nhầm lẫm. Rails có phải là một loại thuốc tiên mà Ruby ở bên trên? (Nó còn phụ thuộc)

Ruby là một ngôn ngữ lập trình, tương tự như Python và Perl. Nó có các kiểu biến động (nghĩa là không cần khai báo kiểu “int i”), thông dịch và có thể chỉnh sửa trong khi chạy (ví dụ như thêm các method vào các class). Nó có rất nhiều shortcut giúp cho code bạn nhìn rất rõ ràng; một method của nó hiếm khi dài quá 10 dòng code. Nó hỗ trợ tốt RegEx và làm việc tốt với các Shell Scripting.

Rails là một gem, hay là một thư viện của Ruby. Một vài gem cho phép bạn sử dụng Win32 API. Một số khác xử lý về mạng. Rails giúp tạo một ứng dụng web, cung cấp các lớp cho việc lưu trữ cơ sở dữ liệu, xử lý các URL và hiển thị HTML (cùng với một webserver, các maintenance task, dòng lệnh sửa lỗi và nhiều thứ nữa).

IRB là dòng lệnh tương tác Ruby (Gõ “irb” để sử dụng). Rails có dòng lệnh IRB đặc biệt có thể truy cập vào ứng dụng web trong khi nó đang chạy (tuyệt vời cho việc debug).

Rake là Make của Ruby. Định nghĩa và chạy những tác vụ như thiết đặt cơ sở dữ liệu, tải lại dữ liệu, sao lưu thậm chí deploy ứng dụng lên website

Erb, hay Embedded Ruby. Giống như PHP, cho phép đồng thời viết code Ruby ở trong HTML, ví dụ:

Hello there,

YAML (YML) có nghĩa là “YAML Ain’t a Markup Languague” –  đây là một cách đơn giản để thể hiện dữ liệu:

{name: John Smith, age: 33}

Giống như JSON và gọn nhẹ hơn nhiều so với XML, nó được Rails dùng để thiết lập các tùy chọn cấu hình (như cơ sở dữ liệu và mật khẩu).

Phù! Sau khi Ruby đã được cài đặt, bạn có thể thêm các rails gem bằng các sử dụng

gem install rails

Một cách tổng quát, sử dụng gem install “gem_name” sẽ tìm kiếm thư viện tương ứng với gem đó trên mạng. Mặc dù Rails “cũng chỉ là một gem”, nhưng nó là một thư viện sát thủ đã mang Ruby đến với ánh đèn sân khấu.

Hiểu hơn về Ruby-Isms

Thật là khó khăn để học mới một ngôn ngữ hay một thư viện cùng một lúc. Đây là một số chú ý dành cho những ai đã có kiến thức nền tảng về C/C++/Java.

Ruby loại bỏ những kí tự không cần thiết: () {};

  • Dấu ngoặc ở lời gọi hàm (method) không bắt buộc, ví dụ: print "hi".
  • Không cần dấu chấm phẩy ở cuối mỗi dòng lệnh (tôi biêt, nó thật điên rồ)
  • Sử dụng “if then else end” hơn là sử dụng các dấu ngoặc nhọn
  • Dấu ngoặc không cần thiết phải bao quanh điều kiện trong câu lệnh if-then.
  • Method sẽ tự động trả về giá trị của dòng cuối cùng (có thể chỉ rõ bằng cách sử dụng return

Ruby loại bỏ những yếu tố gây khó chịu như các dấu ngoặc, dấu chấm phẩy gây rất nhiều phiền nhiều, làm lập trình viên bị sao nhãng bởi logic của chương trình. Tại sao phải đặt dấu ngoặc ((xung quanh), (tất cả mọi thứ))? Thêm nữa, nếu bạn muốn sử dụng dấu ngoặc, cứ đưa chúng vào. Nhưng yên tâm, bạn sẽ sớm quen với cú pháp tiện dụng mới của Ruby thôi.

Những thứ dùng để ngắt câu như dấu chấm phẩy mà chúng ta sử dụng trong C hay Java với mục đích giúp đỡ trình biên dịch chứ không phải giúp đỡ chúng ta – lập trình viên. Với sự gọn gàng của Ruby, sau khi làm quen với Ruby một vài tuần, bạn sẽ thấy chán ngắt khi phải làm việc với những ngôn ngữ phức tạp khác.

def greet(name)              # simple method
   "Hello, " + name          # returned automatically
end

greet "world"                # ==> "Hello, world"

Một số biến hài hước của Ruby

  • x = 3 là một biến cục bộ cho một method hay một block (mất khi method hoàn thành)
  • @x = 3 là biến thực thể (instance variable) sở hữu bởi mỗi mỗi đối tượng. (luôn luôn gắn với đối tượng đó)
  • @@x = 3 là biến của lớp (class variable) được dùng chung bởi tất cả các đối tượng (cũng gắn với đối tượng đó)
  • :hello là một symbol, giống như một hằng ký tự. Thuận tiện cho việc đặt chỉ số cho hash
  • dictionary = { :cat => "Goes meow", :dog => "Barks loud."} là một hash với cặp key/value. Truy cập phần tử bởi dictionary[:cat].

Một số toán tử hài hước của Ruby

Ruby có toán tử || khá là khôn lỏi. Khi đặt nó vào một ràng buộc

x = a || b || c || "default"

Nó có nghĩa là “kiểm tra từng giá trị một và trả về giá trị đầu tiên mà không sai”. Có nghĩa là nếu a sai, thử b. Nếu b sai, thử c. Nếu không được nữa thì trả về xâu “default”.

Nếu bạn viết x = x || "default" nó có nghĩa là “Gán x bằng chính nó (nếu nó có một giá trị), nếu không thì gán default”. Một cách viết đơn giản hơn là:

x ||= "default"

có ý nghĩa tương tự: gán x là giá trị “default” trừ khí nó có giá trị khác. Bạn sẽ nhìn thấy biểu diễn này rất nhiều trong Ruby,

Một số block khôi hài của Ruby

Ruby có “block”, giống như hàm ẩn (anonymous function) truyền vào vòng lặp hay một hàm khác. Những block này có thể chỉ ra tham số bằng cách sử dụng |param| và sau đó thực thi. Block rất tiện lợi cho việc áp dụng một số hàm lên từng phần tử của một mảng. Nó giúp ta nghĩ chúng là một kiểu hàm ẩn có thể có, nhưng không nhất thiết phải có tham số.

3.times do |i|
   print i*i
end

Trong ví dụ này, các số 0, 1, 2 được đưa vào block (do..end), nhận từng tham số (i) rồi in ra giá trị bình phương của i. Kết quả thu được lần lượt là 0, 1, 4 (nó sẽ là “014” bởi ta không in dấu cách). Block được dùng khá là thường xuyên ở trong Ruby, vì vậy, bạn hãy dần làm quen với nó.

Cuốn Why’s Poignant Guide To Ruby chứa khá nhiều mẹo dành cho người mới bắt đầu làm quen với Ruby.

Hiểu hơn về Rails-isms

Rails có những đặc thù riêng của nó. Các lập trình viên nói rằng “Tin tôi, điều đó là tốt cho bạn”. Điều đó đúng, các tính năng đã làm cho Rails nổi bật, nhưng họ cũng thường bị nhầm lẫn khi mà họ click chuột. Hãy nhớ rằng

  • Các lớp và tên bảng rất quan trọng. Rails có những quy ước về tên, nó hi vọng những đối tượng từ lớp Person sẽ được lưu vào bảng cơ sở dữ liệu với tên people. Vâng, Rails có pluralization engine giúp chỉ ra đối tượng nào tương ứng với bảng nào (Tôi không đùa bạn đâu). Phép thuật là có thật, nhưng khá là đáng sợ vào lúc ban đầu khi bạn không chắc các lớp và các bảng làm thế nào để có thể liên kết được với nhau.
  • Rất nhiều method có thể nhận các tùy chọn hash như là một tham số, hơn là việc có cả tá các tham số riêng lẻ. Ví dụ như khi bạn nhìn thấy

link_to “View Post”, :action => ‘show’, :controller => ‘article’, :id => @article

Lời gọi này thực sự đang làm việc này:

link_to("View Post", {:action => 'show', :controller => 'article', :id => @article})

Chỉ có hai tham số đó là: tên(“View Post”) và một hash với 3 cặp key/value. Ruby cho phép chúng ta xóa đi những dấu ngoặc không cần thiết, thay vào đó sử dụng việc rút gọn một cách linh hoạt.

Hiểu về mô hình Model-View-Control

Rails được xây dựng trên pattern Model-View-Control. Đây là một khái niệm đơn giản: tách biệt tầng dữ liệu, logic và hiển thị của chương trình. Việc này giúp bạn chia các chức năng ra một cách rõ ràng, giống như việc phân chia các file HTML, CSS và Javascript khỏi việc sử dụng chúng cùng một lúc. Cụ thể như sau:

  • Models là những lớp nói chuyện với cơ sở dữ liệu. Bạn có thể tìm kiếm, tạo mới và lưu các mô hình (model), nên bạn (thường) không hay phải viết SQL. Rails có lớp để xử lý việc lưu vào cơ sở dữ liệu khi một model được cập nhật. Thật kỳ diệu.
  • Controllers nhận đầu vào của người dùng (như một URL) và quyết định xem sẽ làm gì (hiển thị một trang, sắp xếp một item hay gửi một bình luận). Ban đầu chúng có thể có các logic như là tìm đúng model hay sửa đổi dữ liệu. Nhưng khi chương trình rails của bạn được cải thiện, liên tục refactor và chuyển các business logic vào model (fat model, skinny controller). Lý tưởng nhất, controllers chỉ nhận input, gọi model method và sau đó đưa output cho View (bao gồm cả thông báo lỗi).
  • Views hiển thị các output, thường là HTML. Chúng ta sử dụng ERB, giống như PHP, sử dụng HTML kèm thêm một chút code Ruby chèn thêm vào. Rails đồng thời cũng dễ dàng trong việc tạo view dưới dạng XML (cho web services/RSS feeds) hoặc JSON (cho AJAX)

Kiến trúc MVC là chìa khóa cho việc xây dựng một ứng dụng web dễ đọc, dễ duy trì, dễ cập nhật.

Hiểu về cấu trúc thư mục của Rails

Khi bạn tạo một ứng dụng Rails đầu tiên, các thư mục đã được tạo sẵn cho bạn. Các thư mục được sắp xếp rất gọn gàng: Models ở app/models, controllers ở app/controllers và views ở app/views.

Các quy ước đặc tên rất quan trọng – nó giúp cho ứng dụng rails có thể tìm thấy các phần của nó một cách dễ dàng mà không cần phải có những thiết đặt phức tạp. Thêm nữa, nó rất là dễ cho một lập trình viên có thể hiểu và học từ một ứng dụng rails. Bạn có thể nhìn vào Typo, một ứng dụng rails về blog, bạn có thể hiểu nó hoạt động như thế nào trong vòng một vài phút.

Hiểu về Scaffolding

Scaffolding cho bạn một số hành động mặc định từ controller (URL để ghé thăm) và view (mẫu cần điền) để tương tác với dữ liệu – bạn không cần phải tự tạo một interface. Bạn vẫn cần phải tạo Model và các bảng cơ sở dữ liệu.

Hãy nghĩ về việc scaffold như là một interface mặc định bạn có thể dùng để tương tác với ứng dụng – bạn sẽ từ từ override các phần mặc định như là ứng dụng của bạn được xây dựng. Bạn có thể chỉ ra scaffold trong controller với một dòng lệnh:

scaffold :person

và nó sẽ thêm các action và view mặc định cho việc xem, tạo, sửa các đối tượng “Person” của bạn. Scaffolding giúp đỡ chúng ta rất nhiều trong các giai đoạn đầu tiên.

Các Tip và Trick khác

Ban đầu tôi định lên kế hoạch học các tip và trick khi mới bắt đầu làm quen với Rails. Tuy nhiên ý định đó nhanh chóng sụp đổ do Ruby on Rails cần rất nhiều những kiến thức nền tảng, và bởi vì tính “kỳ diệu” của nó, mà nó có thể gây nhầm lẫn. Tôi sẽ cập nhật thêm các trick trong những bài viết tới đây.

Nếu bạn có ý định dấn thân vào con đường phát triển web, các tài liệu dưới đây có thể hữu ích với bạn:

Dưới đây là hai video hài hước về Ruby on Rails. Chúc bạn có những trải nghiệm thú vị khi tìm hiểu và làm việc với framework Rails.

One thought on “Bắt đầu với Ruby on Rails: Giá mà tôi biết trước

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s