3

スピーカーとスライダーがあるイベントがあります。

クラス イベント

  has_many :speakers, dependent: :destroy
  accepts_nested_attributes_for :speakers, allow_destroy: true

  has_many :sliders, dependent: :destroy

クラススピーカー

 belongs_to :event

クラススライダー

 belongs_to :event

スピーカーには独自のコントローラーがなく (ネストされた属性を介してモデルに直接送信されます)、スライダーにはあります。

新しいスライダーをアップロードすると、イベント ビューでそれらを出力しようとするとエラーが発生します (スピーカーはうまく表示されます)。

イベントビュー

<% @event.sliders.each do %>
  <p>hello dolly</p>
<% end %>

エラー

SQLite3::SQLException: no such column: sliders.event_id: SELECT "sliders".* FROM "sliders"  WHERE "sliders"."event_id" = ?

イベントコントローラー

  def show      
    @event = Event.find(params[:id])
  end

コンソール:

>> e = Event.find_by(id:9)
=> #<Event id: 9, title: "...">

>> e.speakers
=> #<ActiveRecord::Associations::CollectionProxy [#<Speaker id: 59, name: "...", created_at: "2013-08-27 09:28:58", updated_at: "2013-08-27 09:28:58", event_id: 9>]>

>> e.sliders
!! #<ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: sliders.event_id: SELECT "sliders".* FROM "sliders"  WHERE "sliders"."event_id" = ?>

移行とスキーマはすべて整っていますが、関係に問題があるのでしょうか?

ありがとう、スタックオーバーフローの人々

4

2 に答える 2

4

テーブルに列がないため、そのエラーが発生していますslidersevent_id次を使用して、別の移行を実行してテーブル にevent_id列を追加できます。sliders

rails g migration add_event_id_to_sliders event_id:integer

次に移行を実行します。

rake db:migrate
于 2013-08-28T08:20:41.023 に答える
4

あなたのスライダーテーブルにはevent_id列または任意のforeign_keyがあります...移行を生成して追加します

rails generate migration AddEventIdToSliders event_id:integer

rake db:migrate

ありがとう

于 2013-08-28T08:27:06.023 に答える