有条件地通过extend方法

时间:2015-06-03 14:39:46

标签: ruby-on-rails ruby activerecord

我正试图找出如何通过关联有条件地检索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

UserAssociationProject具有多态关联,增加了复杂性。

当我运行User.first.projects.owned时,我只想通过UserAssociationsis_owner布尔值设置为true来检索与用户关联的项目。

我猜我必须对proxy_association做些什么?

3 个答案:

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