2011-10-11 40 views
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所以更新屬性被傳遞零的而不是實際的數據

+0

您是否在模型定義中使用attr_accessble? – lucapette

+0

nope,我找的第一件事 – Jimmy

+0

你的控制器的後源,處理更新的測驗 – Hck

回答

0

發現問題是因爲使用@ page.type.downcase.underscore而不是@page.type.underscore.downcase,所以更新屬性被傳遞給nil而不是實際數據