我正试图找出如何通过关联有条件地检索has_many中的记录。
我有三个班级:
class User < ActiveRecord::Base
has_many :user_associations
has_many :projects,
source: :user_associatable,
source_type: 'Project',
through: :user_associations do
def owned
# retrieve projects that have is_owner = true on the user_association
end
end
end
class UserAssociations < ActiveRecord::Base
belongs_to :user_associatable, polymorphic: true
belongs_to :user
end
class Project < ActiveRecord::Base
has_many :user_associations, as: :user_associatable
has_many :users, through: :user_associations
end
UserAssociation
与Project
具有多态关联,增加了复杂性。
当我运行User.first.projects.owned
时,我只想通过UserAssociations
将is_owner
布尔值设置为true
来检索与用户关联的项目。
我猜我必须对proxy_association
做些什么?
答案 0 :(得分:1)
我认为您只需要where
方法中的owned
条款:where("users_associations.is_owner": true)
。
答案 1 :(得分:0)
您可以通过在项目类中指定范围并在用户类的has_many中使用该范围来实现。
在您的用户类中......
has_many :projects,
source: :user_associatable,
source_type: 'Project',
through: :user_associations,
-> { is_owner }
在您的项目类中......
scope :is_owner, where('is_owner = true')
答案 2 :(得分:0)
您可以在项目模型中编写范围
scope :owned, -> {where(user_authentications: {is_owner: true})}