Ruby on rails 3 具有嵌套属性的Rails 3模型不更新子级
我有一个模型设置,用户可以创建一个包含许多问题和每个问题的许多答案的测验 模型如下所示:Ruby on rails 3 具有嵌套属性的Rails 3模型不更新子级,ruby-on-rails-3,Ruby On Rails 3,我有一个模型设置,用户可以创建一个包含许多问题和每个问题的许多答案的测验 模型如下所示: 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_ma
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\u attributes
后检查@quick时,它会显示更新的问题和答案,但在页面更新后它们不会被保留
我以前从未遇到过这种问题,我很难找出原因,有人能分享一些见解吗
谢谢
根据要求,控制器代码:(quick是Page的STI子类)
PagesController“您的页面已更新”
其他的
渲染:编辑
终止
终止
终止
编辑:
发现问题是因为使用了
@page.type.downcase.underline
而不是@page.type.underline.downcase
所以更新属性被传递为nil而不是实际数据发现问题是因为使用了@page.type.downcase.underline而不是@page.type.underline.downcase
所以更新属性被传递为nil而不是实际数据您是否在模型定义中使用attr_accessable?不,我首先查找的是控制器的Post源,它处理quizIs的更新这可能是一个类型问题吗?测验接受嵌套属性,但您可能尝试在页面上调用“update_attributes”。否,因为它在创建和更新时工作正常,将更新测验对象上的属性,但不会更新任何子元素
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