Rails关系抛出一个错误:SQLException:没有这样的列



我有一些活动,它们有扬声器和滑块。

类事件

  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人员

您的滑块表有event_id列或任何外键。。。通过生成迁移添加它

rails generate migration AddEventIdToSliders event_id:integer

rake db:migrate

感谢

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

rails g migration add_event_id_to_sliders event_id:integer

然后运行迁移:

rake db:migrate

最新更新