= button_to如果已经是其他形式,则不生成表单

时间:2009-09-19 14:46:31

标签: ruby-on-rails forms haml

在我的案例new和preview中创建和编辑时使用相同的表单部分。 部分看起来有点像这样(我使用HAML)

=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个按钮呢?

编辑: 另一个解决方法是隐藏的复选框,如果按下button_to则由javascript设置并提交表单,在控制器中将它们分开

3 个答案:

答案 0 :(得分:12)

HTML实际上不允许嵌套表单。有些浏览器会这样做,但在其他浏览器中会看到一些疯狂的行为您是在显示原始输出的HTML还是来自firebug的计算DOM?

处理此案例的首选方法是将button_to移到另一个表单之外。如果您对仅使用JS的选项很酷,则可以使用link_to :method => :post并将链接设置为看起来像按钮。

答案 1 :(得分:1)

最后使用了

:name => 'otheraction'
控制器中的

然后检查是否

params[:commit] or params[:otheraction]

在params hash

答案 2 :(得分:1)

我构建了一个名为button_link_to的宝石。

使用button_link_to方法将生成按钮标记但不使用表单标记嵌套。

像link_to一样使用它。

您可以从此处获取更多信息:https://github.com/tonilin/button_link_to

如果您想观看演示:http://button-link-to.herokuapp.com/