`where`采用`true`或`false`

时间:2012-12-11 04:07:41

标签: ruby-on-rails ruby

我正在为本地狗收养创建一个'match.com'风格的应用程序,用户或狗可以在其中创建个人资料。在每个配置文件中,都有布尔字段。我想在dog配置文件中显示具有相同true值的正确狗,并在用户配置文件中显示相应的布尔字段。在示例中,如果Dog.kids_under_10User.profile.kids_under_10匹配,则会显示狗。我可以使用StringInteger10)来完成此操作,但我正在尝试学习编写代码的最佳方法。

我最终会传递额外的参数,但我想一旦我理解了如何使下面的例子具有功能性,我应该能够根据需要使用相同的逻辑简单地添加参数。

控制器:

@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

1 个答案:

答案 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