我有一个模型设置,用户可以在每个问题上创建一个包含许多问题和许多答案的测验
模型看起来像这样:
model Page < AR::Base
end
model Quiz < Page
has_many :questions
accepts_nested_attributes_for :questions, :allow_destroy => true
end
model Question < AR::Base
belongs_to :quiz
has_many :answers
accepts_nested_attributes_for :answers, :allow_destroy => true
end
model Answer < AR::Base
belongs_to :question
end
我的表格看起来像这样:
= form_for @quiz do |f|
f.fields_for :questions do |qf|
# fields omitted, have fields for id, content, etc
qf.fields_for :answers do |af|
# fields omitted, have fields for id, answer, etc
f.submit 'save'
当我仅编辑测验或添加新问题和答案时,一切都运行得非常好,但是当我编辑现有问题和答案时,更改不会保留在数据库中。我可以看到正确的嵌套参数被发送到控制器中,并在调用update_attributes
后检查@quiz时显示更新的问题和答案,但在页面更新后它们不会被保留。
我之前从未遇到过这类问题,而且在查明原因时遇到问题,是否有人可以分享一些见解?
谢谢!
根据要求,控制器代码:(测验是Page的STI子类)
PagesController < ApplicationController
def update
@page = @section.pages.find(params[:id])
if @page.update_attributes(params[@page.type.downcase.underscore])
redirect_to online_course_section_pages_path(@online_course, @section), :notice => "Your page has been updated"
else
render :edit
end
end
end
编辑:
发现问题是因为使用@page.type.downcase.underscore
而不是@page.type.underscore.downcase
因此更新属性传递的是nil而不是实际数据
答案 0 :(得分:0)
发现问题是因为使用@ page.type.downcase.underscore而不是@page.type.underscore.downcase
所以更新属性传递的是nil而不是实际数据