2012-04-30 28 views
0

我有以下幾點:Rails的更新一個關聯的模型

class Person < ActiveRecord::Base 
    has_many :tasks 
end 

class Task < ActiveRecord::Base 
    belongs_to :person 
end 

我沒有麻煩的人創造新的任務,但嘗試更新TAKS當它變得很難。

在開始時我有一個部分爲兩個動作:

<%= form_for([@person, @person.tasks.build]) do |f| %> 
    # Form stuff 
    <%= f.submit "Guardar", :class => 'btn'%> 
<% end %> 

但它一直試圖更新時創建新的對象。所以我創建分開創建和更新的形式,而第二個是這樣的:

<%= form_for([@person, @task], :url => {:action => :update}) do |f| %> 
    # Form stuff 
    <%= f.submit "Guardar", :class => 'btn'%> 
<% end %> 

我的問題是,是否有隻有一個形式做兩件事的方法嗎?它如何知道在使用單個模型時何時創建或更新?

回答

1

是的。它們被稱爲嵌套屬性。這篇演說重點講述瞭如何在你的應用程序中實現嵌套屬性的基礎: http://railscasts.com/episodes/196-nested-model-form-part-1

+0

但我不想同時更新兩個模型,我只想更新一個任務,我不能使用通常情況下: '<%= form_for @task do | f | %> #Form stuff <%= f.submit「Guardar」,:class =>'btn'%> <% end %>'因爲它會拋出一些路由錯誤(即邏輯,因爲它屬於另一個模型) – Frannito

+0

它應該' t拋出錯誤。這些錯誤通常是路由錯誤,例如沒有這樣的方法task_path(@task)。而不是url:{action::update},你可以試試:'url:person_task_path(@person,@task)'? – Max

+0

對於這兩種情況都適用,所以我只使用了form_for([@ person,@task]),thanks = D。那麼,與form_for([@ person,@ person.tasks.build])有什麼不同呢? – Frannito