2009-01-06 85 views
2

我在我的Rails應用程序中有兩種形式。它們都存在於單獨的選項卡中,當我提交一個表單時,我希望另一個表單中的數據也被保存。我應該怎麼做?或者有沒有更好的方法來做到這一點,而不是使用兩個單獨的表單?是否有更好的方式將長表單分散到多個選項卡中,並且當我按下提交所有選項卡中的所有數據時應該達到我的操作。謝謝。兩種形式具有相同的動作

回答

5

您可以展開一個表單來覆蓋這兩種表單的所有元素。

只要表單標籤符合X/HTML標準,這就完全可以。

<form action='action1'> 
    <!-- All elements from both forms, plus tabs, etc. --> 
</form> 

要考慮的唯一的事情是,如果有將永遠是那個區域,將需要去到另一個動作中的另一種形式。例如,如果添加第三個選項卡,則在其他兩個選項卡之間添加第三個選項卡,這將具有不同的操作。

你不想落得像:

<form action='action1'> 

    <!-- elements from the combined forms --> 

    <form action='action2'> 
     <!-- elements for a totally different form, not valid inside another form -->  
    </form> 

    <!-- more elements from the combined forms --> 

</form> 

在這種情況下,這將是更好鞏固在提交使用JavaScript時兩種形式。

jQuery(jquery.com)會使這非常容易。例如,您可以序列化兩個表單,然後將它們連接起來並通過post或get將結果發送到服務器。

請參閱http://docs.jquery.com/Ajax/serialize

可能有更好的方法來做到這一點,但我想不出任何我的頭頂。

1

我無法測試,如果這個概念作品的權利,但我相信,你可以使用jQuery實現這一目標,其提交功能將攔截任何選項卡上的所有表單提交,東西沿着這些線路

$("form").submit(function(event){ 
    event.preventDefault(); 
    //serialize forms here and submit using jquery post 
}); 
0

你應該看看fields_for方法。你可以做這樣的事情:

<% form_for @house do |f| %> 
    <%= f.text_field :square_feet %> 

    <% fields_for @listing do |s| %> 
    <%= s.hidden_field :id %> 
    <%= s.text_field :asking_price %> 
    <% end %> 

    <%= f.submit %> 
<% end %> 

然後在你的控制你會做這樣的事情:

house = House.find(params[:id]) 
house.update_attributes(params[:house]) 
listing = Listing.find(params[:listing][:id]) 
listing.update_attributes(params[:listing]) 

這是一個更新,但你可以做任何你在那裏想。