范围关联属性的模型

时间:2017-05-25 18:18:08

标签: ruby-on-rails ruby-on-rails-4 scope named-scope

我有一个用户模型(用于身份验证/授权),带有相关的配置文件模型(用于有关用户的信息,即haircolor)。

我正在尝试创建一个范围来查找具有特定属性的所有用户。即:所有深色头发的人(头发颜色是黑色或棕色),或所有头发光亮的人(头发颜色是金发或银色)。

我可以找到所有黑头发的个人资料,但我如何找到相关用户。

应用程序/模型/ user.rb:

class User < ActiveRecord::Base
  has_one :profile

应用程序/模型/ profile.rb

class Profile < ActiveRecord::Base
  belongs_to :user
  scope :dark_hair, -> { where('hair_color = ? or hair_color = ?', 'black', 'brown' }
  scope :light_hair, -> { where('hair_color = ? or hair_color = ?', 'blond', 'silver' }

所以我可以找到个人资料:

irb>> Profile.dark_hair

但我无法获得用户(这些都不起作用):

irb>> Profile.dark_hair.user
irb>> Profile.dark_hair.users
irb>> User.profile.dark_hair

如何询问我想要的用户?或者范围应该在用户身上?我试过了,但无法弄清楚如何正确地写它。

1 个答案:

答案 0 :(得分:1)

使用merge

User.joins(:profile).merge(Profile.dark_hair)

http://api.rubyonrails.org/classes/ActiveRecord/SpawnMethods.html#method-i-merge