我有3个模型:Event
Lineup
Artist
class Event < ActiveRecord::Base
has_many :lineups
has_many :artists, through: :lineups
end
class Lineup < ActiveRecord::Base
belongs_to :event
belongs_to :artist
end
class Artist < ActiveRecord::Base
has_many :events, through: :lineups
has_many :lineups
end
艺术家有name
属性。
编辑:我的问题不够准确。
如何找到所有活动,例如,这三位艺术家的名字:
artist1
,artist2
,artist3
?
有了这些事件:
event1.artists.pluck(:name)
=> ['artist1', 'artist2', 'artist3']
event2.artists.pluck(:name)
=> ['artist1', 'artist2', 'artist3', 'artist4']
event3.artists.pluck(:name)
=> ['artist1', 'artist2', 'artist4']
event4.artists.pluck(:name)
=> ['artist1', 'artist2']
结果应为event1
和event2
答案 0 :(得分:3)
您将使用joins
之类的:
Event
.joins(:artists)
.where( artists: { name: ['artist1', 'artist2', 'artist3'] } )
答案 1 :(得分:0)
假设您的模型持有@event = Event.artists.all
进入您的视图并使用此
<% @event.each do |x| %>
<%= x.name %>
<% end %>
这将打印出每个艺术家的所有名字。
如果你特别要求artist1,artist2,artist3 ......请使用此
@event.where(name: 'artist name goes here')
答案 2 :(得分:0)
我设法根据Arup的答案做到了这一点。
lineup = ['artist', 'artist2', 'artist3']
Event.joins(:artists)
.where(artists: { name: lineup})
.group("events.id")
.having("count(events.id) = ?", lineup.length)