我正在为本地狗收养创建一个'match.com'风格的应用程序,用户或狗可以在其中创建个人资料。在每个配置文件中,都有布尔字段。我想在dog配置文件中显示具有相同true
值的正确狗,并在用户配置文件中显示相应的布尔字段。在示例中,如果Dog.kids_under_10
和User.profile.kids_under_10
匹配,则会显示狗。我可以使用String
或Integer
(1
或0
)来完成此操作,但我正在尝试学习编写代码的最佳方法。
我最终会传递额外的参数,但我想一旦我理解了如何使下面的例子具有功能性,我应该能够根据需要使用相同的逻辑简单地添加参数。
控制器:
@user = current_user.profile
@dogs = Dog.by_profile(params[@user.kids_under_10])
型号:
def self.by_profile(user_profile)
Dog.where('kids_under_10 = ?', user_profile )
end
答案 0 :(得分:2)
您的@dogs
作业可能如下所示
@dogs = Dog.where(kids_under_10: @user.kids_under_10)
您无法使用by_profile
类方法。
如果您想保留类方法,您的控制器将如下所示
@user = current_user.profile
@dogs = Dog.by_profile(@user)
和你的模型的类方法,像这样
def self.by_profile(user_profile)
return [] if user_profile.nil?
Dog.where(kids_under_10: user_profile.kids_under_10)
end