我以前是这么做的:
Foo.find_by_bar('a-value')
我现在可以这样做:
Foo.where(:bar => 'a-value').limit(1).first
这是否被推荐?这是否是最好的方法?我是否应该继续使用“旧”方法,因为它仍然是有用的语法糖,还是现在有更好的方式可以支持链接和其他好东西?
这是否被推荐?这是否是最好的方法?我是否应该继续使用“旧”方法,因为它仍然是有用的语法糖,还是现在有更好的方式可以支持链接和其他好东西?
我以前是这么做的:
Foo.find_by_bar('a-value')
我现在可以这样做:
Foo.where(:bar => 'a-value').limit(1).first
这是否被推荐?这是否是最好的方法?我是否应该继续使用“旧”方法,因为它仍然是有用的语法糖,还是现在有更好的方式可以支持链接和其他好东西?
这是否被推荐?这是否是最好的方法?我是否应该继续使用“旧”方法,因为它仍然是有用的语法糖,还是现在有更好的方式可以支持链接和其他好东西?
Foo.find_by( bar: 'a_value', wibble: 'a wibble value' )
我认为返回单个记录的最佳方法类似于你的第二个例子,但可以省略限制部分:
Foo.where(:bar => 'a-value').first
这个遵循了新的语法,如果你想要在查找中添加更多条件,它也支持链接。
Foo.where(:bar => 'a-value').first!
。否则将引发ActiveRecord::RecordNotFound
异常。 - iltempoORDER BY "foo"."id" ASC
。这可能会使查询变得不太高效。 - undefinedfind_sole_by
(或者where(...).sole
)用于此类情况。ActiveRecord::RecordNotFound
异常。如果找到多个记录,则引发ActiveRecord::SoleRecordExceeded
异常。Foo.find_sole_by(bar: 'a-value')
在只需要单个记录的情况下非常方便。
Foo.find_by_bar('a-value')
Foo.find_by_bar_and_wibble('a foo value', 'a wibble value')
追加一个 ! 使它在未找到记录时引发 RecordNotFound 异常:
Foo.find_by_bar!('a-value')
其他的替代方案:
Foo.find(:first, conditions: { bar: 'a-value' })
您还可以使用多个属性:
Foo.find(:first, conditions: { bar: 'a-value' , wibble: 'a wibble value' })
find_by(bar: 'a-value')
。 - sevenseacat