在rails 4中,不推荐使用find_by,所以你如何处理

时间:2014-05-28 21:00:25

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

因为不推荐使用find_by,所以我开始为每个find ...创建不同的方法,例如:

之前:

Model.find_by_username 'username'

后: --in model ---

class << self
   def by_username username
      where(:username => username).first 
   end
end

这是一个很好的命名吗?你给这些方法起了什么名字?

3 个答案:

答案 0 :(得分:20)

根据Rails 4 Release Notes

  

除了find_by _...和find_by _...之外的所有动态方法!不推荐使用。

find_by不是动态方法,因此它不被弃用find_by_...&amp; find_by_...!是动态的,但仍未按上述方式弃用。

这意味着您仍然可以使用Active Record提供的原始方法,而无需定义自己的方法:

Model.find_by_username(:username)
Model.find_by(username: 'value', age: 24)


如果您想要真正弃用的finder方法的功能,您可以包含它们被移入的gem:activerecord-deprecated_finders。或者按照Rails 4发行说明所说的那样:

  

以下是如何重写代码:

     
      
  • find_all_by _...可以使用where(...)重写。
  •   
  • find_last_by _...可以使用where(...)。last。
  • 重写   
  • scoped_by _...可以使用where(...)重写。
  •   
  • find_or_initialize_by _...可以使用find_or_initialize_by(...)重写。
  •   
  • find_or_create_by _...可以使用find_or_create_by(...)重写。
  •   
  • find_or_create_by _...!可以使用find_or_create_by!(...)重写。
  •   

答案 1 :(得分:3)

我会避免使用这些方法使您的模型混乱。此外,Rails仍然提供find_by方法。因此,我认为更好的解决方案是

Model.find_by(username: 'whatever_username')

答案 2 :(得分:-1)

它被弃用了

Model.find_by username: 'username'

所以你应该使用这个版本。