2009-09-19 76 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哈希表