ActiveRecord 利用 Ruby 動態特性,透過 method_missing 將 find_by_欄位名、find_all_by_欄位名 轉換為條件查詢,免去手寫 SQL。
order = Order.find_by_name("Dave Thomas")
orders = Order.find_all_by_name("Dave Thomas")
order = Order.find_all_by_email(params['email'])
等價轉換:
Order.find_by_name("Dave", other_args)
# =>
Order.find(:first, :conditions => ["name = ?", "Dave"], other_args)
Order.find_all_by_name("Dave")
# =>
Order.find(:all, :conditions => ["name = ?", "Dave"])
user = User.find_by_name_and_password(name, pw) # => User.find(:first, :conditions => ["name = ? and password = ?", name, pw])
方法名以 and 串接欄位名,不支援 or。
and 可能造成歧義find 呼叫,效能相同find 明確指定 :conditions