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

Rails表单字段验证和单击处理程序

Rails:表单提交确认消息中的选中复选框

Ruby on Rails:提交表单时“您想要的更改被拒绝”

提交表单时,不会保存对 Rails 输入标记的 javascript 更改

Rails 4:更改简单表单输入的“名称”属性