Ruby / JS如何在提交按钮后重新加载页面?

时间:2016-05-09 08:16:10

标签: javascript jquery html ruby-on-rails ruby

我正在使用ruby on rails编写Web应用程序。 在控制器中:

  def create
@category = Category.new(category_params)

respond_to do |format|
  if @category.save
    format.html { redirect_to @category, notice: 'Category was successfully created.' }
    format.json { render :show, status: :created, location: @category }
    format.js { render js: 'window.top.location.href = "/categories";' }
  else
    format.html { render :new }
    format.json { render json: @category.errors, status: :unprocessable_entity }
  end

end

在new.html.erb中:

<h1>New category</h1>
<%= render 'form' %>
<%= link_to 'Back', categories_path %>

在_form.html.erb中:

<%= form_for(@category) do |f| %>
<% if @category.errors.any? %>
<div id="error_explanation">
  <h2><%= pluralize(@category.errors.count, "error") %> prohibited this category from being saved:</h2>
  <ul>
  <% @category.errors.full_messages.each do |message| %>
    <li><%= message %></li>
  <% end %>
  </ul>
</div>
<% end %>
<div class="field">
<%= f.label :content %><br>
<%= f.text_field :content, placeholder: "content" %>
</div>
<div class="field">
<%= f.label :description %><br>
<%= f.text_area :description, placeholder: "description" %>
</div>
<div class="actions">
<a href="#" onclick="window.top.location.reload(true)"><%= f.submit  %>
</a>
</div>
<% end %>

我希望提交按钮起作用,并在刷新页面之前保存新创建的类别。在代码中,页面在保存之前刷新。 请帮忙。感谢

2 个答案:

答案 0 :(得分:3)

你好在这种情况下你应该通过js提交表格,即

<%= form_for(@category, remote: true) do |f| %>
<%= end%>

如果有任何问题,请告诉我。

答案 1 :(得分:3)

我更喜欢使用不引人注目的javascript。因此,我的答案如下:

_form.html.erb

<%= form_for(@category, remote: true) do |f| %>
  ...
  <div class="actions">
    <%= f.submit %>
  </a>
</div>
<% end %>

categories_controller.rb

def create
  @category = Category.new(category_params)

  respond_to do |format|
    if @category.save
      format.html { redirect_to @category, notice: 'Category was successfully created.' }
      format.json { render :show, status: :created, location: @category }
      format.js { render js: 'window.top.location.reload(true);' }
    else
      format.html { render :new }
      format.json { render json: @category.errors, status: :unprocessable_entity }
    end
  end
end

请注意,我更新了format.js以呈现将重新加载页面的JS脚本,如您所愿。但是,您应该知道,无论何处调用对/categories的JS POST请求,此脚本都可以在任何页面上运行。