Rails:从 submit_tag 更改表单操作
Posted
技术标签:
【中文标题】Rails:从 submit_tag 更改表单操作【英文标题】:Rails: Change form action from submit_tag 【发布时间】:2011-05-14 21:53:53 【问题描述】:我有一个表单,它总是将表单提交给控制器中的“更新”功能,我使用“remote_form_for”标签创建了这个表单。在这个表单中,我有来自不同表的对象,并且从这个表单我想通过 AJAX 请求将整个表单数据提交给另一个函数(而不是“更新”函数)。
我尝试了很多方法,包括使用提交标签和操作
<% remote_form_for @employee, :url => organization_employee_path(@organization, @employee), :method => :put do |employee_form| %>
// form objects and other functionalities
....
....
// views inside the forms
<div id="employee_header_div">
<%= render :partial => "employee_header", :locals => :employee => @employee %>
</div>
...
...
<%= submit_tag "page_level_validation", :id => "page_level_validation" , :action=>"validate"%>
<% end %>
但是 Ajax 请求总是调用相同的“更新”函数。
如果有人帮助解决此问题,这将非常有帮助。
【问题讨论】:
您能发布您的查看代码吗?此外,您正在使用的 Rails 版本...form_remote_for
在 Rails 3 中已弃用
我使用的是Rails 3.0.0版本,我的视图代码如下。 company_provider_path(@company), :method => :put do |provider_form| %>。在这个表单中,我使用 AJAX 调用来更新表单值,现在我想将相同的详细信息传递给另一个函数进行验证。我使用了标签 ' "page_level_validation" , :action=>"validate"%>' 但它也通过 AJAX 将详细信息传递给相同的“更新函数”。跨度>
所以问题出在 remote_form_for 我在 rails 3 中使用。那么我应该用什么来代替它呢?我已经在这个表单中写了很多功能。我的表单更改是否也会影响功能?
【参考方案1】:
您不能将提交设置为指向与主表单指定的位置不同的位置(除非您想使用 html5 formaction 属性并处理浏览器兼容性后果)。
但是,您可以做的是在控制器中创建一个新的操作来处理这种情况。
例如..
<% remote_form_for @employee, :url => organization_employee_validate_path(@organization, @employee), :method => :put do |employee_form| %>
在你的控制器中
def validate
#do something loosely based around the update method
end
不要忘记添加适当的路线。
【讨论】:
【参考方案2】:试试这个:
<% form_for @employee, :remote => true, :url => organization_employee_path(@organization, @employee), :method => :put do |employee_form| %>
【讨论】:
以上是关于Rails:从 submit_tag 更改表单操作的主要内容,如果未能解决你的问题,请参考以下文章
submit_tag 在 rails4 视图中无法使用正确的 css
Ruby on Rails:提交表单时“您想要的更改被拒绝”