Program.where(name: "xxyyzz123")
将返回一个集合,即使只有一个匹配的记录迫使我做一些丑陋的事情,比如:
puts Program.where(name: "xxyyzz123").first.age
或者
puts Program.where(name: "xxyyzz123")[0].age
当我确定只有一条记录匹配时,是否有更短的方法从该记录中获取属性?
Program.where(name: "xxyyzz123")
将返回一个集合,即使只有一个匹配的记录迫使我做一些丑陋的事情,比如:
puts Program.where(name: "xxyyzz123").first.age
或者
puts Program.where(name: "xxyyzz123")[0].age
当我确定只有一条记录匹配时,是否有更短的方法从该记录中获取属性?
ActiveRecord 的基于动态属性的查找器 (find_by_x) 允许您选择与数据库中匹配的第一条记录。例如:
Program.find_by_name('xxyyzz123')
将返回 name = 'xxyyzz123' 的第一条记录
请注意,这些查找器在 Rails 4 中“轻度弃用”。使用
Program.find_by(name: 'xxyyzz123")
实现了相同的功能,并且在需要更新到下一个版本的 Rails 时,如果他们删除了前者的功能,可能会更容易。
有关更多信息,请参阅API中的 ActiveRecord::Base 。
是的,您必须使用 来访问它Program.where(name: "xxyyzz123").first.age
,但是,在 Rails 3 中,通常建议使用以下类型的查询:Program.find_by_name('xxyyzz123').age
。
Rails 4 弃用了上述语法,并建议您使用以下语法:
Program.find_by(name: 'xxyyzz123')
如果您有多个条件,那么只需:Program.find_by(name: 'xxyyzz123', lang: 'ruby')
在幕后,它执行相同的 tomfoolery -where
子句并返回第一个对象。