因为不推荐使用find_by,所以我开始为每个find ...创建不同的方法,例如:
之前:
Model.find_by_username 'username'
后: --in model ---
class << self
def by_username username
where(:username => username).first
end
end
这是一个很好的命名吗?你给这些方法起了什么名字?
答案 0 :(得分:20)
除了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'
所以你应该使用这个版本。