我喜欢activerecords multiple find
:
Country.find(1, 2) # Returns an array of countries
我喜欢自动find_by_attribute
生成:
Country.find_by_iso2('US') # Equivalent to Country.where(iso2: 'US').first
那么为什么这个组合不起作用/存在?
Country.find_by_iso2('US', 'CA')
# Would expect an array, it fails because too many arguments
Country.find_by_iso2(['US', 'CA'])
# Would expect an array, returns only the last one (Canada)
相反,我不得不写:
['US', 'CA'].map{ |e| Country.find_by_iso2(e) }
更不优雅。
答案 0 :(得分:0)
Model.find_by(*args)
查找与指定条件匹配的第一条记录。没有隐含的订单,所以如果订单很重要,您应该自己指定。
如果未找到记录,则返回nil
。
Post.find_by name: 'Spartacus', rating: 4
Post.find_by "published_at < ?", 2.weeks.ago
docs:http://apidock.com/rails/v4.0.2/ActiveRecord/FinderMethods/find_by
答案 1 :(得分:0)
文件activerecord / lib / active_record / relation / finder_methods.rb,第47行
def find_by(*args)
where(*args).take
end
因为它接受一个参数作为数组并只返回它的第一个元素