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

rei*_*als 7 activerecord ruby-on-rails ruby-on-rails-4

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

之前:

Model.find_by_username 'username'
Run Code Online (Sandbox Code Playgroud)

之后: - 在模型---

class << self
   def by_username username
      where(:username => username).first 
   end
end
Run Code Online (Sandbox Code Playgroud)

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

Tam*_*ash 23

根据Rails 4发行说明:

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

find_by不是动态方法,因此它不会被弃用,而find_by_...&find_by_...!是动态的,但如上所述仍然没有过时.

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

Model.find_by_username(:username)
Model.find_by(username: 'value', age: 24)
Run Code Online (Sandbox Code Playgroud)


如果您想要真正弃用的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!(...)重写.