Ruby không thực sự có các đối số từ khóa. Rails đang khai thác một tính năng của Ruby cho phép bạn bỏ qua các dấu ngoặc xung quanh một băm. Ví dụ, với find
, những gì chúng tôi đang thực sự gọi là:
Nhưng nếu băm là đối số cuối cùng của phương pháp này, bạn có thể bỏ qua các dấu ngoặc và nó vẫn sẽ được coi như một hash:
Person.find(:all, :conditions => "...", :offset => 10, :limit => 10)
bạn có thể sử dụng trong các phương pháp của riêng bạn:
def explode(options={})
defaults = { :message => "Kabloooie!", :timer => 10, :count => 1 }
options = defaults.merge(options)
options[:count].times do
sleep options[:timer]
puts options[:message]
end
end
Và sau đó gọi nó là:
explode :message => "Meh.", :count => 3
Hoặc gọi nó mà không có một cuộc tranh cãi, dẫn đến tất cả các giá trị mặc định được sử dụng:
explode
Nguồn
2010-03-17 14:44:07
Đây là những không phải đối số từ khóa. Thay vào đó, bạn có thể xem mã nguồn của các phương thức lấy các đối số này để tìm hiểu cách thực hiện kỹ thuật này. Hãy xem tài liệu về 'ActiveRecord :: Base.find' (http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002263) để biết các ý tưởng. – yfeldblum