2

我正在为当地的狗收养创建一个“match.com”风格的应用程序,用户或狗可以在其中创建个人资料。在每个配置文件中,都有布尔字段。我想在狗配置文件中显示具有相同true值的正确狗,并在用户配置文件中显示相应的布尔字段。在示例中,如果Dog.kids_under_10User.profile.kids_under_10匹配,则显示狗。我可以使用Stringor Integer( 1or 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
4

1 回答 1

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
于 2012-12-11T04:10:58.273 回答