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

时间:2013-08-28 07:55:45

标签: ruby-on-rails ruby-on-rails-4

我有活动,有扬声器和滑块。

课程活动

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

我的迁移&amp;模式都已到位,我想我的关系会遇到麻烦?

谢谢Stackoverflow人

2 个答案:

答案 0 :(得分:4)

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

rails g migration add_event_id_to_sliders event_id:integer

然后运行迁移:

rake db:migrate

答案 1 :(得分:4)

是您的滑块表有event_id列或任何foreign_key ...通过生成迁移来添加它

rails generate migration AddEventIdToSliders event_id:integer

rake db:migrate

感谢