Rails:查找深度关联



我有一些模型:

ad.rb

class Ad < ActiveRecord::Base    
  belongs_to :seller, polymorphic: true
  scope :published, -> { where(state: "published") }
end

car.rb

class Car < Ad
end

dealership.rb

class Dealership < ActiveRecord::Base
  belongs_to :agent
  has_many :cars, as: :seller
end

agent.rb

class Agent < User
  has_one :dealership, dependent: :destroy
end

user.rb

class User < ActiveRecord::Base
  has_many :ads, as: :seller
  has_many :subscriptions
  def has_valid_subscription?
    !Subscription.valid(self.id).blank?
  end
end

我知道有很多多态性…但是我尽量使数据库保持简单。我清理了所有的模型来集中精力解决问题。

我试图让所有的广告谁有一个卖家与用户有效订阅!

但是我的模型之间有2个层次的关联…而我却得不到!

你能告诉我怎么做吗?

非常感谢。

添加seller_user关联到Ad模型

class Ad < ActiveRecord::Base
  belongs_to :seller, polymorphic: true
  belongs_to :seller_user, :foreign_key => :seller_id, :class_name => "User", conditions: { ads: { seller_type: "User"}}
  scope :published, -> { where(state: "published") }
end

现在你可以做

Ad.all.collect{|ad| ad.seller_user && ad.seller_user.has_valid_subscripion?}

如果你只需要订阅用户的所有广告,你可以做

Ad.joins(:seller_user => :subscriptions)

只是添加一些信息:

Ad.all.collect{|ad| ad unless !(ad.seller_user && ad.seller_user.has_valid_subscripion?)}

如果你不做除非部分,你将得到一个漂亮的布尔数组!

相关内容

  • 没有找到相关文章