Cắt nghĩa những khái niệm thông thường trong Ruby on Rails - Ước gì tôi được biết từ trước

Ruby on Rails giờ đây đã trở nên quá phổ biến với cộng đồng phát triển website, các lập trình viên web hoặc là newbie đôi khi cũng muốn ngắm nghía qua xem Ruby on Rails thực chất nó ra làm sao, mùi vị nó thế nào. Nhưng với Ruby on Rails(RoR) cũng có những khái niệm những người mới bắt đầu lại khá lúng túng khi gặp phải, mà tôi ước trước đây khi bắt tay vào tôi được biết những khái niệm này. Code RoR được một thời gian, tôi cũng muốn chia sẻ các khái niệm đến các bạn:

Trước tiên là Tools

Đây tôi sẽ chia sẻ một số tools mà các bạn sẽ cần đến khi bắt tay vào học RoR, đừng đọc những bài đánh giá trong vô số các bài đánh giá để chọn ra cái tốt nhất; hãy bắt tay vào học từ đâu đó và tiến lên thôi:

  • Rails Tutorial: Một cuốn sách rất đâỳ đủ với kết nối hàng chục hướng dẫn trực tuyến cho bạn bắt đầu từ số 0.
  • InstantRails: Một file .zip chứa Ruby, Apache, MySQL và PHP ( dùng cho PhPMyAdmin), đóng gói và sẵn sàng để bắt đầu.
  • Editting code: có thể sử dụng những công cụ thuận tiện như Sublime, Atom, Vim, ....
  • Công cụ quản lý code: Git, SVN

Nhưng RoR nghĩa là gì?

"Ruby on Rails(RoR)" dễ nhớ nhưng khó hiểu. Có phải Rails là một loại thuốc ma thuật mà Ruby đang sử dụng? (Tùy vào người hỏi là ai, câu trả lời là yes). Ruby là ngôn ngữ lập trình (có thể bạn thừa biết), tương tự như Perl, Python. Ngôn ngữ linh hoạt (ví dụ không cần khai báo int i), có thể khai báo đang trong thời gian chaỵ(như là thêm một method vào class). Nó có hàng chục các phím tắt làm nó trở nên rõ ràng, các methods thường ngắn gọn, hiếm khi quá 10 dòng code. Nó có sự hỗ trợ mạnh mẽ bởi Regex và hoạt động khá trơn tru trong màn hình console Shell. Rails là một gem hoặc gọi là một thư viện của Ruby cũng được. Một vài gems cho phép bạn sử dụng Win32 API. Rails giúp tạo nên các web applications, cung cấp các classes để lưu trữ databases, xử lý URL và hiển thị HTML(là một webserver, maintenance tasks, một debugging console và nhiều thứ khác nữa). IRB interactive Ruby console( tương tác Ruby trên console), gõ irb trên console để sử dụng. Rails thì lại có IRB đặc biệt hơn để tương tác với web app khi nó đang chạy (công cụ tuyệt vời để live debugging). Rake Ruby’s version of Make . Define và run maintenance tasks như là việc settings database, reloading data, backing up data, hoặc là sự kiện deploy app lên website của bạn. Erb embedded Ruby. Tag Erb mix Ruby code và HTML, thường được viết trong views của 1 project RoR. Vì thế nên các file mặc định trong view của RoR sẽ có dạng .erb.* (sau này dùng slim hoặc một gem khác thì đuôi file trong views sẽ khác) ex:

<div>Hello there, <%= get_user_name() %></div>

YAML (or YML)* có nghĩa "YAML Ain’t a Markup Language" - dễ dàng định nghĩa data: {name: "ahihi", age: 69} Giống như JSON nhưng gọn nhẹ hơn nhiều, và Rails sử dụng để config các options, như là database name or password. Một khi Ruby đã được cài đặt, bạn có thể sử dụng lệnh để cài Rails

gem install rails

Thông thường ta sẽ cài các gói thư viện/gem bằng lệnh

gem install GEM_NAME

Understanding Ruby

Thật là khó khăn khi bắt đầu một thư viện và một ngôn ngữ cùng một lúc. Dưới đây là những điều ánh xạ để so sánh với những người có nền tảng là C/C++/Java:

Loại bỏ () {} không cần thiết:

  • gọi methods: print "hello"
  • không còn dùng ; ở cuối dòng
  • sử dụng if else end cho một khối lệnh điều kiện if
  • khi điều kiện if không cần có then
  • method sẽ return kết quả ở dòng cuối cùng

Ruby loại bỏ các phiền toái, dấu . phổ biến khi gọi các methods. Ruby hướng tới các dòng code như là những câu tiếng Anh thông thường, loại bỏ hết những dấu để ngắt dòng hay block code không cần thiết, thay bằng các từ khóa và bằng cách xuống dòng kết hợp với convention. Sau khi đọc quen code Ruby thì những ngôn ngữ có nhiều dấu như kiểu ; {} trở nên rất khó đọc và rối mắt

Ruby variables

  • x = 3 thì x là local variables bên trong một method block (ra khỏi method thì nó không có nghĩa)
  • @x = 3 x là instance variables, sở hữu bởi mỗi object
  • @@ = 3 x ở đây lại là class variables, share cho tất cả các objects.
  • :hello là một symbol, như là một constant string, rất hữu dụng khi khai báo hash trong Ruby:
  • dictionary = { :cat => "Goes meow", :dog => "Barks loud."} là một hash với cặp key/value. Truy cập đến element bằng cách dictionary[:cat]

Ruby assignments

Ruby có toán tử || khá đặc biệt mà có thể gây nhầm lẫn cho các bạn:

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

toán tử || có nghĩa là: "test mỗi giá trị và trả về nếu nó không false". false ở đây bao gồm các giá trị false hoặc nil, false không bao gồm các giá trị blank hoặc 0: 0, "" hay [ ]

có nghĩa là: nếu a == b == c == false hoặc nil thì x = "default"

Nếu bạn viết x = x || default có nghĩa là " set giá trị x cho chính nó (nếu có giá trị khác false hoặc nil) , nếu không thì sử dụng giá trị default. Một cách dễ dàng hơn để viết

x ||= default

cách viết này có ý nghĩa giống như cách viết bên trên: set giá trị default cho x nếu chính nó không có giá trị (false hoặc nil)

Ruby Blocks

Ruby có các blocks, nó giống như anonymous functions và truyền một vòng lặp hoặc truyền vào một function khác. Những blocks này có thể tự định nghĩa parameter bằng cách sử dụng |param| và sau đó gọi các actions, functions của nó. Block rất hữu dụng khi áp dụng cho các function mà mỗi chúng là một phần tử của array. Ex:

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

trong block trên, các index 0, 1, 2 sẽ được truyền làm param cho mỗi vòng lặp. khi đó kết quả in ra sẽ là 014. Cũng tương tự như vòng lặp thôi.

class và table names rất quan trọng

  • Rails có quy ước đặt tên nhất định, nó kì vọng các objects từ class Person lưu vào database table có tên là people. Rails có pluralization engine để figure các object maps đến table. Tên class sẽ là dạng CamelKey (thường là số ít), còn table name sẽ là dạng số nhiều. Đấy là một điểm khá thú vị của rails.
  • Nhiều methods dùng các "options" hash như là một parameter, thay vì hàng chục các parameters riêng lẻ. Ex:
link_to “View Post”, action:  ‘show’, controller:  ‘article’, id:  @article

Khi đó rails sẽ gọi:

link_to(“View Post”, { action:  ‘show’, controller:  ‘article’, id:  @article })

nhìn vào dòng code trên chắc bạn cũng đã thấy được hash rồi chứ?

MVC Pattern

MVC: model- views-controller. Xây dựng trên mô hình MVC, có thể hiểu đơn giản

  • Models: classes để tương tác với database. Bạn có thể find, create, save từ models mà không cần phải viết truy vấn SQL.
  • Controllers: lấy user input, như là URL, params ... và quyết định những gì được làm, show, order hoặc các thao tác để gọi models ... Sau đó truyền output qua views
  • Views: hiển thị output, thường là HTML. Rails cũng cho phép dễ dàng tạo views với XML(cho web servies/RSS feeds) hoặc là JSON (cho AJAX calls)

Scaffolding

Scaffolding cho phép mặc định các controller actiosn (URLs để đến) với một view tương ứng(form to fill out) để tương tác với data của bạn. Hãy nghĩ Scaffolds giống như là một "default" interface mà bạn có thể tương tác với app của bạn - bạn có thể override một cách từ từ từ những default mà app đã build sẵn cho bạn. Định nghĩa scaffolds trong controller với một nốt nhạc:

scaffold :person

Kết luận

Trên đây tôi có tổng hợp một số khái niệm, từ khóa mà khi bắt đầu với Ruby on Rails thì bạn hay gặp nhưng thường bị nhầm lẫn. Hi vọng bài viết này sẽ giúp các bạn tiếp cận nhanh hơn. Happy coding!

All Rights Reserved