2009-10-15 62 views
1

我想用轨道中的2个按钮创建一个窗体。两种形式都以不同的方式对相同的数据进行操作,我宁愿将关联的功能保留在两种不同的方法中。以前,我在params [:commit]上进行字符串比较后,重定向到适当的方法,但我的直觉告诉我们有更好的方法。建议?如何在Rails中创建一个包含许多可能操作的表单?

回答

0

我也在表单上使用了params [:commit]方法。使用I18n帮助程序可以减少这种情况,因为您可以在视图和控制器中使用相同的查找功能,所以您不会遇到字符串更改的问题。

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

0

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

1

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

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

2

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

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

而是“myForm会”的,你需要把无论是在你的标签的“名称”属性。

您可以设置该属性在默认的形式:像这样的标签:

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