我有一个模型“Events
”,每个事件都包含“Genre
”(不同模型)的ID数组。当我创建一个事件时,我会检查一堆框并将检查的类型保存到数据库中。这一切都很好。
当我运行循环以显示所有事件时,字段genre_ids
会返回一个数组,其中包含需要从genres
表中检索的每个所选类型的ID。
我尝试了一些建议,但我没有成功。
体裁模型:
class Genre < ActiveRecord::Base
has_and_belongs_to_many :events
end
活动模式:
class Event < ActiveRecord::Base
belongs_to :user
has_many :genres
end
事件控制器:
class EventsController < ApplicationController
def index
@event_all = Event.all
end
def get_genres(event_id)
@event_genre = Event.find(event_id).genre_id
end
helper_method :get_genres
end
-------
最后是循环:
<div id="index-events-wrap">
<% @event_all.each do |ea| %>
<div class="item">
<div class="event-image">
image here
</div>
<ul>
<li><%= ea.name %></li>
<li><%= get_genres(ea.id) %></li>
<li><%= ea.venue_name %></li>
<li><%= ea.venue_address %></li>
<li><%= ea.venue_postcode %></li>
</ul>
</div>
<% end %>
</div>
答案 0 :(得分:3)
尝试:
@event_all = Event.includes(:genres).all
它将再进行一次查询(以避免多次实例化Genre实例)并自动填充所有关联。所以在视图中你可以:
<li><%= ea.genres %></li>
顺便说一句,两个类都应该有has_and_belongs_to_many
,否则Rails就不会理解它。
class Event < ActiveRecord::Base
belongs_to :user
has_and_belongs_to_many :genres # <- this one
end
如果需要,请为联接表添加迁移,请参阅Do I need to manually create a migration for a HABTM join table?