2016-11-02 2 views
1

Ich begann mit Ruby on Rails zu programmieren, und ich habe ein Problem gefunden. Wenn ich ein Modell bearbeite und dies bei der Validierung vom Controller fehlschlägt, gibt der Controller die #show-Modell-URL zurück. Danach, wenn ich das #update abbringe und # das Modell betrachte, zeigt mir der Browser die Fehlerseite an, die der #update-Prozess vorher zurückgibt. Ich mag dieses Verhalten nicht. Ich denke, dieses Problem ist Turbolink. Also ich weiß nicht, ob ich die URL für #update in Controller ändern kann. Irgendwelche Ideen warum passiert das? Danke fortgeschritten.Wie zu vermeiden, senden, um die Ansicht anzuzeigen, nachdem die Modellaktualisierung in Rails fehlschlägt

The next image shows this behavior

class CategoriesController < ApplicationController 
    before_action :set_category, only: [:show, :edit, :update, :destroy] 

    # GET /categories 
    # GET /categories.json 
    def index 
    @categories = Category.all 
    end 

    # GET /categories/1 
    # GET /categories/1.json 
    def show 
    end 

    # GET /categories/new 
    def new 
    @category = Category.new 
    end 

    # GET /categories/1/edit 
    def edit 
    end 

    # POST /categories 
    # POST /categories.json 
    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 } 
     else 
     format.html { render :new } 
     format.json { render json: @category.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /categories/1 
    # PATCH/PUT /categories/1.json 
    def update 
    respond_to do |format| 
     if @category.update(category_params) 
     format.html { redirect_to categories_url, notice: 'Category was successfully updated.' } 
     format.json { render :show, status: :ok, location: @category } 
     else 
     format.html { render :edit } 
     format.json { render json: @category.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /categories/1 
    # DELETE /categories/1.json 
    def destroy 
    @category.destroy 
    respond_to do |format| 
     format.html { redirect_to categories_url, notice: 'Category was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_category 
     @category = Category.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def category_params 
     params.require(:category).permit(:name) 
    end 
end 

Zeige Seite:

<h2 class="page-header">Categoría #<%= @category.id %></h2> 

<div class="panel panel-default"> 
    <div class="panel-heading"> 
     Detalles de la categoría 
    </div> 
    <div class="panel-body"> 
     <dl class="dl-horizontal"> 
      <dt>Nombre</dt> 
      <dd><%= @category.name %></dd> 
     </dl> 
     <%= link_to 'Editar', edit_category_path(@category), class: 'btn btn-link' %> | 
     <%= link_to 'Volver', categories_path, class: 'btn btn-link' %> 
    </div> 
</div> 
+0

verwenden Sie Flash-Nachrichten? Können Sie den Code für Ihren Controller bereitstellen und anzeigen? – heyitsjhu

+0

Ich benutze Gerüst für alle generieren. Dies ist der Code des Kategorien-Controllers und der Ansichtshow. http://collabedit.com/qh2a8 – Dar

Antwort

0

Angenommen, Ihre Rails-Admin gem verwenden. Seem mag, dass dies ein Pjax-Problem ist. So können Sie pjax deaktivieren, mehr Details here

+0

Nein, ich verwende nicht Rails Admin gem. Ich verwende den Scaffold-Befehl zum Generieren von all. – Dar

Verwandte Themen