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!(...)重写.