如何在Rails中创建一个包含许多可能操作的表单?

时间:2009-10-15 22:27:22

标签: ruby-on-rails params

我想在rails中创建一个带有2个按钮的表单。两种形式都以不同的方式对相同的数据进行操作,我宁愿将相关的功能保存在两种不同的方法中。以前我在对params [:commit]进行字符串比较后重定向到了适当的方法,但我的直觉说有更好的方法。建议?

4 个答案:

答案 0 :(得分:2)

两个不同的提交按钮,将表单发送到两个不同的操作:

<%= submit_tag('Insert', :onclick=>"document.myForm.action = 'insert';") %> 
<%= submit_tag('Update', :onclick=>"document.myForm.action = 'update';") %>

您需要在标记的“name”属性中放置任何内容,而不是“myForm”。

您可以使用默认格式设置该属性:对于以下标记:

<%= form_for(@something, :html => {:name => "myForm"}) do |f| %>

答案 1 :(得分:1)

不使用JavaScript,您提到的唯一解决方案是:通过查看控制器中的POST数据来检查单击了哪个按钮。这仅仅是由于HTML表单元素的性质。它的action属性不能有多个值。

如果您不担心JavaScript不可用时会发生什么,那么在实际提交表单之前,您可以编写一些脚本来在单击其中一个提交按钮时更改操作属性。对于ajax请求,它可以直接提交到正确的URL而无需更改表单上的属性。

答案 2 :(得分:0)

我还在表单上使用了params [:commit]方法。使用I18n帮助程序使得它不那么脆弱,因为您可以在视图和控制器中使用相同的查找,因此您不会遇到字符串稍微改变的问题。

除此之外,我只能考虑使用JavaScript处理按钮上的点击,然后将表单数据发送到不同的Rails操作(也许您可以在提交表单之前使用JavaScript更改表单的HTML操作属性)。

答案 3 :(得分:0)

如果您正在使用prototype.js,则可以使用Form.serialize()从表单中获取数据,然后使用不同的按钮发布到不同的操作。