Rails中的动态爆炸发现者4

时间:2013-01-17 05:55:00

标签: ruby-on-rails rails-activerecord dynamic-finders ruby-on-rails-4

Rails 4正在摆脱动态查找器,所以

User.find_by_hash(hash)

变为

User.where(hash: hash) # .first

好的,没什么大不了的。但是,由于没有User.find_by_hash!(hash)方法,处理where!()等动态爆炸查找器的最佳方法是什么? Rails 4 Release Notes可以方便地避免这种情况。

更新:它明确地说:"所有动态方法除了find_by _...和find_by _...!已弃用。"

自页面改变以来,或者我在阅读时失明。

3 个答案:

答案 0 :(得分:2)

我认为新语法是

User.find_by!(hash: hash)

至少ryanb是这样做的: http://railscasts.com/episodes/400-what-s-new-in-rails-4

希望有所帮助。

答案 1 :(得分:2)

好吧,如果你需要一个方法来找到所有但是如果关系为空则引发异常,你可以自己为你的模型创建这样的新方法(或者混合到ActiveRecord :: QueryMethods)。类似的东西:

def where!(*args)
  rel = where(*args) 
  raise RecordNotFound if rel.empty?
  rel
end

答案 2 :(得分:2)

它明确地说:“不推荐使用find_by _...和find_by _...!的所有动态方法EXCEPT。”