Ruby on rails - 检索id数组并使用该数组查询不同的模型

时间:2012-10-09 20:12:44

标签: ruby-on-rails ruby erb

我有一个模型“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>

1 个答案:

答案 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?