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" = ?>

我的迁移和模式都到位了,我想我在关系方面遇到了麻烦?

谢谢 Stackoverflow 的人

4

2 回答 2

4

你的滑块表是否有event_id列或任何外键...通过生成迁移添加它

rails generate migration AddEventIdToSliders event_id:integer

rake db:migrate

谢谢

于 2013-08-28T08:27:06.023 回答
4

您的sliders表缺少event_id列,这就是您收到该错误的原因。您可以使用以下命令运行另一个迁移以将event_id列添加到sliders表中:

rails g migration add_event_id_to_sliders event_id:integer

然后运行迁移:

rake db:migrate
于 2013-08-28T08:20:41.023 回答