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