2016-03-29 4 views
1

Ich habe ein Modell namens Artikel in meiner Schienen 4 App.Schienen 4 - wie man eine statische Seite zu einem Ansichtsordner hinzufügt

Ich möchte eine statische Seite namens falteaway.html.erb zu meinem Ansichten/Artikel-Ordner hinzufügen.

Ich habe diese Ansicht Seite hinzugefügt, und meine Artikel Controller aktualisiert mit:

def foldway 
end 

Ich habe auch versenkbare vom set_article Verfahren auszuschließen versucht:

before_action :set_article, except: [:foldway], only: [:show, :edit, :update, :destroy ] 

In meiner Routen-Datei Ich habe hinzugefügt:

get '/foldway' => 'articles#foldway' 

Wenn ich alles speichern und versuchen, wenn die Seite rendert, ge ich einen Fehler t, der sagt:

Couldn't find Article with 'id'=foldway 

Warum es versucht, den Artikel-ID zu setzen, wenn ich es von der set_article Methode in meinen Schienen-Controller ausgenommen habe. Ich möchte nur, dass es eine statische Seite rendert.

Wie füge ich das zu meiner Datei hinzu?

Mein kompletter Artikel Controller ist:

class ArticlesController < ApplicationController 
    before_action :set_article, except: [:foldway], only: [:show, :edit, :update, :destroy] 
    before_action :authenticate_user!, except: [:index, :show ] 
    layout "article" 

    respond_to :html, :json 
# GET /articles 
    # GET /articles.json 
    def index 
    @articles = policy_scope(Article) 
    # query = params[:query].presence || "*" 
    # @articles = Article.search(query) 
    end 

    # def index 
    # if params[:query].present? 
    #  @books = Book.search(params[:query], page: params[:page]) 
    # else 
    #  @books = Book.all.page params[:page] 
    # end 
    # end 

    # GET /articles/1 
    # GET /articles/1.json 
    def show 

    end 

    def foldway 
    end 

    # GET /articles/new 
    def new 
    @article = Article.new 
    @article.comments.build 
    end 

    # GET /articles/1/edit 
    def edit 

    authorize @article 
    end 

    # POST /articles 
    # POST /articles.json 
    def create 
    # before_action :authenticate_user! 
    # authorize @article 
    @article = current_user.articles.new(article_params) 

    respond_to do |format| 
     if @article.save 
     format.html { redirect_to(@article) } 
     format.json { render :show, status: :created, location: @article } 
     else 
     format.html { render :new } 
     format.json { render json: @article.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /articles/1 
    # PATCH/PUT /articles/1.json 
    def update 
    # before_action :authenticate_user! 
    authorize @article 
    respond_to do |format| 
    # if @article.update(article_params) 
    #  format.json { render :show, status: :ok, location: @article } 
    # else 
    #  format.html { render :edit } 
    #  format.json { render json: @article.errors, status: :unprocessable_entity } 
    # end 
    # end 
     if @article.update(article_params) 
     format.html { redirect_to(@article) } 
     format.json { render :show, status: :ok, location: @article } 
     else 
     format.json { render json: @article.errors, status:  :unprocessable_entity } 
     end 
     format.html { render :edit } 
    end 
    end 



    # DELETE /articles/1 
    # DELETE /articles/1.json 
    def destroy 
    before_action :authenticate_user! 
    authorize @article 
    @article.destroy 
    respond_to do |format| 
     format.json { head :no_content } 
    end 
    end 


    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_article 
     @article = Article.find(params[:id]) 
     authorize @article 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def article_params 
     params.require(:article).permit(:body, :title, :image, :tag_list, 
     comment_attributes: [:opinion]) 
    end 

end 
+0

Können Sie bitte Ihre komplette Controller-Code schreiben für Artikel? –

+1

Wenn du ** nur ** verwendest, was ist dann nötig ** außer ** in ** vor_aktion **? – dp7

+0

Weil es nicht nur mit nur funktioniert - also habe ich hinzugefügt, außer zu versuchen, es zu verstärken. – Mel

Antwort

0

Das Problem aus Ihrer Routen-Datei.

Ich rate Ihnen, tu dies in Ihrem routes.rb Datei setzen:

get 'articles/foldway' => 'articles#foldway', as: :foldway 

match '/foldway', to: 'articles#foldway', via: :get 

und für Ihre Artikel Controller Sie müssen nur sagen:

before_action :set_article, only: [:show, :edit, :update, :destroy ] 
+0

Wie kann ich verknüpfen dazu in der Aussicht? Das funktioniert nicht: <%= link_to 'READ MORE', article_foldway_path %> Mel

+0

Wenn Sie das Spiel wie ich setzen, können Sie Ihre link_to wie folgt schreiben: <% link_to 'READ MORE', foldway_path%> –

+0

vielen Dank – Mel

Verwandte Themen