2013-08-01 4 views
2

j'ai rails appris parErreur: L'action « show » n'a pas pu être trouvée pour PostsController »

http://guides.rubyonrails.org/getting_started.html

je suis tombé sur une erreur lors de l'exécution de sauvegarde des données dans le contrôleur L'erreur qui apparaît.. lors de l'exécution du blog est: "l'action 'show' n'a pas pu être trouvée pour PostsController"

**

Mon code pour posts_controller .rb est

**

class PostsController < ApplicationController 
def new 
end 
def create 
@post=Post.new(params[:post].permit(:title,:text)) 
@post.save 
redirect_to @post 
end 

private 
def post_params 
params.require(:post).permit(:title,:text) 
end 

def show 
@post=Post.find(params[:id]) 
end 
end 

**

Mon code pour show.html.rb est

**

<p> 
<strong> Title:</strong> 
<%= @post.title %> 
</p> 
<p> 
<strong> Text:</strong> 
<%= @post.text %> 
</p> 

**

Le code pour create_posts.rb

**

class CreatePosts < ActiveRecord::Migration 
    def change 
    create_table :posts do |t| 
     t.string :title 
     t.text :text 

     t.timestamps 
    end 
end 

S'il vous plaît, aidez-moi pourquoi cette erreur est à venir méthode

+0

http://stackoverflow.com/questions/17965341/nomethoderror-in-postsshow supprimer le double d'une question :) – AKovtunov

Répondre

6

PostsController#show devraient être rendus publics.

class PostsController < ApplicationController 
    def new 
    end 

    def create 
    @post=Post.new(params[:post].permit(:title,:text)) 
    @post.save 
    redirect_to @post 
    end 

    def show 
    @post=Post.find(params[:id]) 
    end 

private 

    def post_params 
    params.require(:post).permit(:title,:text) 
    end 

end 
+1

Toute méthode ci-dessous la déclaration privée est considérée comme privée, si vous voulez une méthode pour être publique vous devez le déclarer ci-dessus ou écrire le mot-clé public avant votre méthode. – yarakyo

+0

"TypeError dans PostsController # show nul n'est pas un symbole" –

+0

l'erreur ci-dessus est à venir –

1

Pourquoi avez-vous mis votre action de show dans le privé? Juste le mettre hors du privé.

def new 
    @post = Post.new 
end 
def create 
@post=Post.new(params[:post].permit(:title,:text)) 
if @post.save 
    redirect_to @post 
else 
    render 'new' 
end 
end 

def show 
    @post=Post.find_by_id(params[:id]) 
    if @post.blank? 
    flash[:error] = 'The Post not found in the database' 
    redirect_to root_path 
    end 
end 

private 

def your_private_functions 

end 
+0

il montre "modèle d'erreur manquant" –

+0

redirect_to posts_path si @ post.blank? ici posts_path est un exemple ('posts # index'), vous pouvez rediriger vers d'autres endroits ... comme 'root_path'. BTW, le message que vous recherchez n'existe pas dans votre base de données. –

+0

@nehasharma, il suffit de vérifier ma réponse éditée. –

Questions connexes