2010-09-22 15 views
2

J'utilise formtastic et haml sur une application Rails 3. J'essaie de faire un formulaire imbriqué pour les sondages et les questions, mais cela ne fonctionne tout simplement pas pour moi. J'ai regardé le railcast et tout le reste, mais je n'arrive pas à le faire fonctionner pour mon application. Donc, en ce moment, je donne les résultats suivants:Pourquoi accept_nested_attributes_for ne fonctionne pas pour moi? (rails 3)

modèles

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 

méthode contrôleur pertinente

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 

vues

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

Le formulaire s'affiche correctement, mais lorsque je modifie une question et que vous cliquez sur Enregistrer, les enregistrements ne reflètent pas mes modifications. Je n'ai debug (params) activée, et voici ce qu'il revient comme:

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

Qu'est-ce que je fais mal ici? Je ne veux pas avoir à écrire ces changeurs d'attributs manuellement!

Répondre

8

Je suis à la recherche à un ancien code de la mine qui utilise accepts_nested_attributes_for et je pense que ce que vous devez faire est de changer

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

à

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

cela a fini par être, mais j'ai oublié de re-answer: P –

+2

Toutes les idées pour lesquelles [les formulaires d'objets imbriqués] (http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes) Pas besoin de l'attr_accessible? – Turadg

+0

A travaillé pour moi. Je vous remercie. –

0

Je n'autorisais pas certaines choses dans attr_accessible. Le problème est, je ne sais pas quoi autoriser. Je pense que c'est questions_attributs, mais cela ne semble pas fonctionner de cette façon.