Rails与find_by_column vs之间的区别

时间:2012-10-17 02:13:06

标签: ruby-on-rails activerecord

  

可能重复:
  Rails “find_all_by” vs “.where”

在这段代码中

我想知道第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

1 个答案:

答案 0 :(得分:1)

.where方法返回ActiveRecord关系,这意味着它们可以与其他此类方法和范围链接,如Model.where(:user_id => id).published中所示。动态查找器(.find_by_name等),返回模型实例或数组,不能与其他范围链接。

如果与感叹号一起使用,动态查找程序在找不到预期记录时(而不是ActiveRecord::RecordNotFoundnil或空关系)可能会返回[]错误,例如User.find_by_email!('example@email.com)`。

他们每个人都有自己的用途;您可以根据调用方法的情况来决定。