我有一个用户模型(用于身份验证/授权),带有相关的配置文件模型(用于有关用户的信息,即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
如何询问我想要的用户?或者范围应该在用户身上?我试过了,但无法弄清楚如何正确地写它。
答案 0 :(得分:1)
使用merge
:
User.joins(:profile).merge(Profile.dark_hair)
http://api.rubyonrails.org/classes/ActiveRecord/SpawnMethods.html#method-i-merge