在这段代码中
我想知道第1行和第2行之间有什么区别。
COLUMN_NAME为零或唯一值。
def get_row
id = "someidhere"
1 r = Model.find_by_COLUMN_NAME(id)
2 r = Model.where('COLUMN_NAME = ? ', id).first
if !r.nil?
r
else
nil
end
end
2比1明确吗?我应该注意哪些副作用? (如果id为nil,或者搜索不存在的id)
之前我使用的是find_by_COLUMN_NAME,我收到意外结果。
当函数返回时,我正在调用r.id.to_s
,其中r应该是Model的一个实例,但是,有时候我从无处获得值2
。
答案 0 :(得分:1)
.where
方法返回ActiveRecord关系,这意味着它们可以与其他此类方法和范围链接,如Model.where(:user_id => id).published
中所示。动态查找器(.find_by_name
等),返回模型实例或数组,不能与其他范围链接。
如果与感叹号一起使用,动态查找程序在找不到预期记录时(而不是ActiveRecord::RecordNotFound
,nil
或空关系)可能会返回[]
错误,例如User.find_by_email!('example@email.com
)`。
他们每个人都有自己的用途;您可以根据调用方法的情况来决定。