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