轨道上的两个保存按钮形式略有不同

时间:2015-02-09 23:55:33

标签: javascript ruby-on-rails ajax forms ruby-on-rails-4

我已经创建了一个长度的表单,为此我设置了一个ajax保存按钮,以便用户可以保存他们的进度并继续编辑表单。这非常有效;没什么好抱怨的。

我的问题是我希望在用户完成编辑并希望进行最终提交时,表单末尾的第二个按钮。功能上的关键区别在于它在保存后重定向到“表单已提交,谢谢等等等等”页面。

我已尝试使用标准提交按钮(<%= f.button :submit, "Submit", id:"incorporation_submit", class: "btn btn-primary" %>),但这似乎无效;没有提交,也没有点击日志中的任何内容。 (我猜它是因为我已经为表格定义了遥控器)。

我的表格概述如下;我删除了表单字段和侧边栏内容以最大限度地减少混乱。最终提交按钮是上面显示的f.button :submit

<div id="wrapper" class="active main-content">
  <%= simple_form_for @incorporation, :remote => true do |f| %>
    <div>
      .
      .
      .
     Form contents
      .
      .
      .
    </div>
      <!-- Sidebar -->
    <!-- Sidebar -->
    <div id="sidebar-wrapper">
      <ul id="sidebar_menu" class="sidebar-nav">
        <li class="sidebar-brand"><a id="menu-toggle" href="#">Menu<span id="main_icon" class="glyphicon glyphicon-align-justify"></span></a></li>
        .
        .
        .
        Sidebar navigation tools
        .
        .
        .
      </ul>
      <%= button_to "Save Progress", incorporation_path(@incorporation), remote: true, id:"save" %>
    </div>
    <div>
    <%= f.button :submit, "Submit", id:"incorporation_submit", class: "btn btn-primary" %>
    </div>
  <% end %>
</div>

更新1: 如果我从:remote=> true中移除simple_form_for,则提交按钮可以正常工作,重定向和所有(显然ajax保存按钮不会)

更新2: 我发现,如果我从侧边栏中删除button_to,我会从日志中获得输出;但是我无法成功将浏览器重定向到我在控制器中设置的静态页面。见下面的输出:

Redirected to http://localhost:3000/welcome/index
Completed 302 Found in 134ms (ActiveRecord: 11.2ms)


Started GET "/welcome/index" for 127.0.0.1 at 2015-02-10 01:39:21 -0700
Processing by WelcomeController#index as JS
  Rendered welcome/index.html.erb within layouts/application (0.2ms)
  User Load (4.2ms)  SELECT  `users`.* FROM `users`  WHERE `users`.`id` = 1  ORDER BY `users`.`id` ASC LIMIT 1
Completed 200 OK in 1747ms (Views: 1740.3ms | ActiveRecord: 4.2ms)

1 个答案:

答案 0 :(得分:1)

听起来两个按钮都应该调用控制器中的更新操作。然后,您可以检查参数&#39; commit&#39;并按照您的意愿处理您的回复。例如,

视图中的

按钮:

<%= form.submit 'Save' %>
<%= form.submit 'Update' %>

检查控制器中单击了哪个按钮:

if params[:commit] == 'Save'
  ... redirect somewhere ...
else
  ... do something else ...
end