为什么accepts_nested_attributes_for对我不起作用? (导轨3) [英] Why is accepts_nested_attributes_for not working for me? (rails 3)

查看:91
本文介绍了为什么accepts_nested_attributes_for对我不起作用? (导轨3)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm using formtastic and haml on a Rails 3 application. I'm trying to make a nested form for surveys and questions, but it's just not working for me. I've watched the railscast and on it and everything, but I can't seem to make it work for my application. So right now, I have the following:

模型

class Survey < ActiveRecord::Base
  attr_accessible :intro, :name, :pubdate, :enddate, :pubid

  belongs_to :user
  has_many :questions, :dependent => :destroy, :autosave => true

  accepts_nested_attributes_for :questions, :allow_destroy => true
end

class Question < ActiveRecord::Base

  belongs_to :survey
  has_many :answers, :dependent => :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"

该表单可以正确显示,但是当我更改问题并单击保存"时,记录不会反映我的更改.我确实打开了debug(params),这就是它的返回结果:

The form renders correctly, but when I change a question and click save, the records doesn't reflect my changes. I do have debug(params) turned on, and here is what it comes back as:

--- !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"

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

What am I doing wrong here? I don't want to have to write these attribute changers manually!

推荐答案

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

I am looking at some old code of mine that uses accepts_nested_attributes_for and I think what you need to do is change

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

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

这篇关于为什么accepts_nested_attributes_for对我不起作用? (导轨3)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆