2009-09-19 89 views
6

在我的例子new和preview中使用相同的表單部分來創建和編輯。 部分看起來有點像這樣(我使用HAML)= button_to如果已經以其他形式生成表單

=form_tag ({:action => params[:action]}, :multipart => true) 
    =text_field :newsletter, :title 
    =text_area :newsletter, :body 
    =file_field :newsletter,:attachment 
    -if params[:action] == "preview" 
    =button_to "select contacts and send", :action => "contacts" 
    =submit_tag "save and preview" 

但在HTML的輸出是

... 
<input type="submit" value="select contacts and send"/> 
<input type="hidden" value="rwYnZlEpWV4dR89zjgprEALBYmP0xqM3lnKt9JDLyak=" name="authenticity_token"/> 
<input type="submit" value="save and preview" name="commit"/> 
... 

爲何button_to不會產生按鈕形成?

一個解決方案是保持按鈕不在局部區域,每個窗體只有1個,但是我怎樣才能在同一個窗體中有2個按鈕?

編輯: 另一個解決辦法是由JavaScript的,如果按下button_to設置並提交表單,在控制器

回答

12

HTML分開它們實際上並沒有允許對嵌套形式隱藏複選框。有些瀏覽器可以,但其他人會看到一些瘋狂的行爲。您正在顯示的原始輸出或從螢火蟲計算的DOM的HTML?

處理此情況的首選方法是將button_to移到其他表單外。如果您使用JS-only選項很酷,則可以使用link_to :method => :post並將鏈接設置爲像按鈕一樣。

1

在端使用的

:name => 'otheraction' 
在控制器

然後檢查是否任一

params[:commit] or params[:otheraction] 

在params哈希表