0

モデル " " があり、各イベントには " " (別のモデル)Eventsの ID の配列が含まれています。Genreイベントを作成するときは、たくさんのボックスにチェックを入れて、チェックしたジャンルをデータベースに保存します。それはすべてうまくいっています。

genre_idsループを実行してすべてのイベントを表示すると、テーブルから取得する必要がある、選択した各ジャンルの ID を含む配列がフィールドから返されgenresます。

見つけた提案を試しましたが、まだ成功していません。

ジャンル機種:

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

もう 1 つのクエリを作成し (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 に答える