为什么accepts_nested_attributes_for不适合我? (铁轨3)

我在Rails 3应用程序上使用formtastic和haml。 我正在尝试为调查和问题制作一个嵌套表格,但这对我不起作用。 我已经看过railscast以及它和所有内容,但我似乎无法使它适用于我的应用程序。 所以现在,我有以下内容:

楷模

class Survey  :destroy, :autosave => true accepts_nested_attributes_for :questions, :allow_destroy => true end class Question  :destroy attr_accessible :q_text, :order, :q_type end 

相关控制器方法

 def update @survey = Survey.find(params[:id]) @user = current_user if check_auth_and_redirect @user, @survey if @survey.update_attributes(params[:survey]) flash[:success] = "Survey Updated" redirect_to edit_survey_path(@survey) else @title = "Editing Survey #{@survey.id}" render 'edit' end end end 

意见

 = semantic_form_for @survey do |f| = render "shared/survey_inputs", :object => f = f.inputs :for => :questions, :name => "Survey Questions" do |fq| %hr = fq.input :q_text, :label => "Question text" = fq.input :q_type, :label => "Question type", :as => :select, :collection => %w(text scale radio select) = fq.input :order, :label => "Question order" 

表单呈现正确,但当我更改问题并单击“保存”时,记录不会反映我的更改。 我确实打开了调试(params),这是它返回的内容:

 --- !map:ActiveSupport::HashWithIndifferentAccess utf8: "\xE2\x9C\x93" _method: put authenticity_token: CJCc9LvdoPjxwGJkhUnZjR0Z/c5Wt5VBT3bBr/wB4+A= survey: !map:ActiveSupport::HashWithIndifferentAccess name: This is my survey intro: I've got a lovely bunch of coconuts. There they are all standing in a row. pubid: smargdab pubdate(1i): "" pubdate(2i): "" pubdate(3i): "" enddate(1i): "" enddate(2i): "" enddate(3i): "" questions_attributes: !map:ActiveSupport::HashWithIndifferentAccess "0": !map:ActiveSupport::HashWithIndifferentAccess q_text: one one one one one one one one one one one q_type: text order: "3" id: "1" "1": !map:ActiveSupport::HashWithIndifferentAccess q_text: 2 2 2 2 2 2 2 2 2 2 q_type: text order: "1" id: "2" "2": !map:ActiveSupport::HashWithIndifferentAccess q_text: 3 3 3 3 3 3 3 3 3 3 q_type: text order: "2" id: "3" commit: Update Survey action: update controller: surveys id: "2" 

我在这做错了什么? 我不想手动编写这些属性转换器!

我正在看一些使用accepts_nested_attributes_for的我的旧代码,我认为你需要做的是改变

 attr_accessible :intro, :name, :pubdate, :enddate, :pubid 

 attr_accessible :intro, :name, :pubdate, :enddate, :pubid, :questions_attributes 

我不允许在attr_accessible中使用某些东西。 问题是,我不知道该允许什么。 我认为这是questions_attributes,但它似乎没有那样工作。

Interesting Posts