2010-03-19 3 views
0

In this video (10 sec) vous pouvez voir que l'attribut imbriqué n'est mis à jour que si son modèle parent est modifié. Utilisation des rails 3.0.0.beta et full project is on github.Les mises à jour de l'enfant du formulaire imbriqué uniquement si le parent change

Résumé des modèles et forme:

class Project < ActiveRecord::Base 
    has_many :tasks 
    accepts_nested_attributes_for :tasks 
end 

class Task < ActiveRecord::Base 
    belongs_to :project 
    has_many :assignments 
    accepts_nested_attributes_for :assignments 
end 

class Assignment < ActiveRecord::Base 
    belongs_to :task 
end 


form_for(@project) do |f| 

    Project: f.text_field :name 

    f.fields_for :tasks do |task_form| 
    Task: task_form.text_field :name 

    task_form.fields_for :assignments do |assignment_form| 
     Assignment: assignment_form.text_field :name 
    end 
    end 

    f.submit 
end 

Répondre

2

EDIT2: Le même code fonctionne parfaitement dans Rails 2.3.5. Cela semble être un bug dans la version bêta.

EDIT: J'ai écrit un test dans mon application pour simuler cela. Voici le résultat.

test "should update empresa" do 
    addr = empresas(:ufba).address 
    put_with users(:s_one), :update, :id => empresas(:ufba).to_param, 
      :empresa => { :address_attributes => {:id => empresas(:ufba).address.to_param, 
                :city => "Feira de Santana"}} 
    assert_not_nil assigns(:empresa) 
    assert_not_same addr, assigns(:empresa).address, "Endereco nao foi atualizado" 
    assert_redirected_to empresa_path(assigns(:empresa)) 
    end 

Il fonctionne sans erreurs.

+0

J'ai testé dans la console, et ne fonctionne que pour Rails 2.3.5, sur Rails 3.0 l'affectation n'est pas mise à jour. – nanda

+1

Cool, bon à savoir. Merci pour les devoirs nanda! – Chap

+1

Ouvert un billet sur le tracker rails et ajouté test d'unité défaillante pour démontrer: https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4242-nested-child-only-updates-if -parent-changes – Chap

Questions connexes