0

Ich versuche, eine neue Aktionsliste in meinem zuvor erstellten Blog mit Gerüst zu erstellen. Ich bin einen Fehler inFehler beim Erstellen einer neuen Aktion zu scaffold created Controller in Schienen

bekommen

konnte nicht Blog mit 'id' =

auf controllers/blogs_controller.rb

Hier ist mein Controller-Code finden.

class BlogsController < ApplicationController 
before_action :authenticate_user!, :except => [:index, :show] 
layout 'admin', only:[:new, :create, :update, :destroy, :edit, :list] 
before_action :set_blog, only: [:show, :edit, :update, :destroy, 
:list] 

# GET /blogs 
# GET /blogs.json 
def index 
@blogs = Blog.all 
end 

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

def list 
@blogs = Blog.all 
end 

# GET /blogs/new 
def new 
@blog = Blog.new 
end 

# GET /blogs/1/edit 
def edit 
end 

# POST /blogs 
# POST /blogs.json 
def create 
@blog = Blog.new(blog_params) 

respond_to do |format| 
    if @blog.save 
    format.html { redirect_to @blog, notice: 'Blog was successfully   
    created.' } 
    format.json { render :show, status: :created, location: @blog } 
    else 
    format.html { render :new } 
    format.json { render json: @blog.errors, status: :unprocessable_entity } 
    end 
end 
end 

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

# DELETE /blogs/1 
# DELETE /blogs/1.json 
def destroy 
@blog.destroy 
respond_to do |format| 
    format.html { redirect_to blogs_url, notice: 'Blog was successfully destroyed.' } 
    format.json { head :no_content } 
end 
end 

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

# Never trust parameters from the scary internet, only allow the white list through. 
def blog_params 
    params.require(:blog).permit(:title, :description) 
end 

Ende

und mein routes.rb ist

Rails.application.routes.draw do 

resources :blogs do 
collection do 
    get :list, :as => 'list' 
end 
end 
root to: 'home#index' 
end 

nun in meiner neuen Controller Ansicht genannt list.html.erb, ich brauche alle Blog-Post abgesehen von der sehen normale Showaktion.

In meinem list.html.erb

<td><%= link_to blog.title %></td> 

Der Fehler wird mir zeigt set_blog in

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

Antwort

3

Durch die Einbeziehung der :list Methode in Ihrer set_blog vor der Aktion Sie es zwingen für bestimmte aussehen blog mit der id als param, aber was du willst ist eigentlich das was du in der list-methode hast, die alle blogs einzieht.

Also das

def set_blog 
    @blog = Blog.find(params[:id]) 
end 

ist dieses zwingende

def list 
    @blogs = Blog.all 
end 

Zur Behebung dieses dazu durch

before_action :set_blog, only: [:show, :edit, :update, :destroy, :list] 

ändern Sie die :list Methode aus der Menge Blog vor der Aktion

Entfernen
+0

wirkt wie ein Zauber .. danke. – raja

+2

@raja Warum haben Sie die richtige Markierung entfernt? –

+1

Dies sollte die akzeptierte Antwort sein! – Pavan

0

entfernen

: Liste

von before_action

: set_blog

+0

Was ist der Unterschied zwischen diesen? Antwort und Rockwell Rice's Antwort? – Pavan

+0

@raja gut Rockwell's ist beschreibend. Das sollte akzeptiert werden. (y) –

Verwandte Themen