在我的案例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设置并提交表单,在控制器中将它们分开
答案 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/