我有活动,有扬声器和滑块。
课程活动
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人
答案 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
感谢