2010-03-19 60 views
0

In this video(10秒)您可以看到嵌套屬性僅在更改父模型時才更新。嵌套表單子只在父更改時更新

使用rails 3.0.0.beta和full project is on github。模型和形式

摘要:

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 

回答

2

EDIT2:相同的代碼完全在Rails的2.3.5。這似乎是測試版本中的一個錯誤。

編輯:我在我的應用程序中寫了一個測試來模擬這個。結果如下。

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 

它運行沒有錯誤。

+0

我一直在控制檯中測試,並且只適用於Rails 2.3.5,在Rails 3.0上沒有更新Assignment。 – nanda 2010-03-20 03:43:00

+1

很酷,很高興知道。感謝功課南大! – Chap 2010-03-20 14:29:44

+1

在軌道跟蹤器上打開票並添加了失敗的單元測試以演示: https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4242-nested-child-only-updates-if -parent-changes – Chap 2010-03-20 15:16:56