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 _...!已弃用。"
自页面改变以来,或者我在阅读时失明。
答案 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。”