Rails activerecord获取集合的集合

时间:2016-09-08 10:15:46

标签: ruby-on-rails activerecord

我有两个型号

User has_many :events
Event has_many :advertisements

现在我只想显示用户的所有广告

我试过了:

@user.events.joins(:advertisements).all
@user.events.advertisements.all
@user.events.all.advertisements.all

以及其他各种组合,但毕竟我可能会遇到问题。

2 个答案:

答案 0 :(得分:3)

你可以使用很多来获取rails来为你做连接。

class User
  has_many :events
  has_many :advertisements, through: :events
end

user = User.first
user_ads = user.advertisements

如果您不想这样做,尽管可以这样做

user = User.first
ads = Advertisement.joins(:event).where(events: { user_id: user.id })

答案 1 :(得分:0)

你应该像这样建立他们之间的关系

user.rb

has_many :events,dependent: :destroy
has_many :advertisements, through: :events

event.rb

has_many :advertisments,dependent: :destroy
belongs_to :user

advertisement.rb

belongs_to :event

现在您可以直接访问广告。

User.find(1).advertisements