1
我有一个模型的设置,其中用户可以创建与每个问题的许多问题和许多答案测验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_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时,它显示更新的问题和答案,但是在更新页面后它们不会被保留。
我从来没有遇到过这样的问题,并且无法找到原因,任何人都可以分享一些见解吗?
谢谢!
按照要求,控制器代码:(测验是页的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
所以更新属性被传递零的而不是实际的数据
您是否在模型定义中使用attr_accessble? – lucapette
nope,我找的第一件事 – Jimmy
你的控制器的后源,处理更新的测验 – Hck