2011-02-10 40 views
0

呈現生成的父窗體這裏是我的數據模型當一個子類

class Person < ActiveRecord::Base 
end 

class Landlord < Person 
end 

,我想可以用我的人們控制器同時更新鬥地主和人民。因此,這裏是我的觀點:

- form_for :person, @person, :url => {:action => "update"} do |f| 
    ...blah blah fields 

其中@person或者是一個人或一個房東,但生成的HTML如下:

<form action="/people/1" method="post"> 

任何人能提供一些線索,爲什麼這是我所期待的HTML要

<form action="/people/1" method="put"> 

FWIW這是2.3.5。

回答

1

是否使用足智多謀的路線?你是應該的,這樣你可以使用:

- form_for @person.becomes(Person) do |f| 
    = f.field :attribute 

becomes讓您的實例似乎是你傳遞的第一個參數的類,它的Rails然後使用來識別並確定其發送到控制器:

@landlord.becomes(Person) # => Rails will send this to /people 

這也適用於Rails的其他方面:

render @person.becomes(Landlord) 
link_to @landlord.becomes(Person) 
+0

我不知道這存在。謝謝一堆。 – TheDelChop 2011-02-10 04:36:20

1

原因是rails使所有表單方法POST,但傳遞它自己的_method參數,這是一個PUT,POST或DELETE請求。通常你可以把它看成是隱藏字段右邊內的HTML表單,它看起來像這樣的表單:

<input type='hidden' name='_method' value='put' />