Rails:深入了解协会

时间:2014-03-18 14:19:19

标签: ruby-on-rails ruby ruby-on-rails-3

我有一些模特:

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 个答案:

答案 0 :(得分:1)

seller_user关联添加到广告模型

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)

答案 1 :(得分:1)

只是添加一些信息:

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

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

但这导致我想要的东西!