6

在我的情况下,在创建和编辑中使用相同的表单部分新建和预览。部分看起来有点像这样(我使用 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 不生成 button-to 表单?

一个解决方案是将按钮保留在部分之外,并且每个表单只有 1 个,但是我怎样才能在同一个表单中拥有 2 个按钮?

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

4

3 回答 3

14

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

处理这种情况的首选方法是将您button_to的表单移到其他表单之外。如果您对纯 JS 选项很满意,您可以使用link_to :method => :post链接并将其样式设置为看起来像一个按钮。

于 2009-09-19T18:14:38.620 回答
1

最后使用了

:name => 'otheraction'

在控制器中然后检查是否有

params[:commit] or params[:otheraction]

在参数哈希中

于 2009-09-22T09:10:10.173 回答
1

我构建了一个名为button_link_to.

使用 button_link_to 方法将生成按钮标签,但不会被表单标签嵌套。

只需像 link_to 一样使用它。

您可以从这里获得更多信息:https ://github.com/tonilin/button_link_to

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

于 2013-10-17T15:02:14.967 回答