0

我有一个模型“ ”,每个事件都包含一个“ ”(不同模型)Events的 id 数组。Genre当我创建一个事件时,我会选中一堆框并将选中的流派保存到数据库中。这一切都很好。

当我运行循环以显示所有事件时,该字段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>
4

1 回答 1

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

如果需要,请为联接表添加迁移,请参阅是否需要为 HABTM 联接表手动创建迁移?

于 2012-10-09T20:17:16.563 回答