0

Program.where(name: "xxyyzz123")将返回一个集合,即使只有一个匹配的记录迫使我做一些丑陋的事情,比如:

puts Program.where(name: "xxyyzz123").first.age

或者

puts Program.where(name: "xxyyzz123")[0].age

当我确定只有一条记录匹配时,是否有更短的方法从该记录中获取属性?

4

2 回答 2

1

ActiveRecord 的基于动态属性的查找器 (find_by_x) 允许您选择与数据库中匹配的第一条记录。例如:

Program.find_by_name('xxyyzz123')

将返回 name = 'xxyyzz123' 的第一条记录

请注意,这些查找器在 Rails 4 中“轻度弃用”。使用

Program.find_by(name: 'xxyyzz123") 

实现了相同的功能,并且在需要更新到下一个版本的 Rails 时,如果他们删除了前者的功能,可能会更容易。

有关更多信息,请参阅API中的 ActiveRecord::Base 。

于 2013-06-04T22:51:18.447 回答
1

是的,您必须使用 来访问它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子句并返回第一个对象。

于 2013-06-04T22:59:39.783 回答