2016-05-09 19 views
3

私はRuby on Railsを使ってWebアプリケーションを書いています。 new.html.erbでRuby/JS送信ボタンの後にページをリロードする方法は?

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 

:_form.html.erbで

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

:コントローラで

<%= 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 %> 

は私が機能するためにボタンを提出したいと新しく作成されたカテゴリは、ページがリフレッシュされる前に保存されます。コードでは、保存前にページがリフレッシュされます。 助けてください。おかげ

+1

削除 'onclick =" window.top.location.reload(true) "' – madalinivascu

答えて

3

私は控えめなjavascriptを使用することをお勧めします。そのように、私の答えは次のように:

_form.html.erb

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

categories_controller.rb私はページをリロードしますJSスクリプトをレンダリングするためにformat.jsを更新

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 

注意、あなたが望むように。しかし、このスクリプトは、/categoriesへのJS POSTリクエストが呼び出されたときに、どのページでも動作することがわかります。

3

がこんにちはこの場合、あなたは、JSすなわち

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

てフォームを提出しなければならない何らかの問題がある場合は私に知らせてください。