2016-08-29 5 views
1

Ich arbeite an einem einfachen Ruby on Rails Blog. Wenn ein Nutzer einen Beitrag einreicht, möchte ich, dass er auf die Posts-Seite weitergeleitet wird. Anstatt umgeleitet zu werden, erhalte ich einen NoMethodError in PostsController#create - undefined method 'post_path' for #<PostsController:0x007ff379d72110> Did you mean? posts_path post_params root_path Fehler.Beitrag wird nicht auf die show-Seite weitergeleitet

post_controller.rb

class PostsController < ApplicationController 
    before_action :authenticate_user! 
    def new 
     @post = Post.new 
    end 

    def create 
     @post = current_user.posts.new(post_params) 
     if @post.save 
     redirect_to post_path(@post) 
     else 
      render :new 
     end 
    end 

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


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

show.html.erb

<h1 class="show_title"> 
<%[email protected]%> 
</h1> 
<p class="show_date">submiited <%= time_ago_in_words(@post.created_at) ago%></p> 
<p class="show_body"><%[email protected]%></p> 

routes.rb

Rails.application.routes.draw do 
    devise_for :users 
    root 'homes#show' 
    resources :users, only: [:show, :edit, :update] 
    resources :posts, only: [:new, :create] 
    resource :relationships, only: [:create, :destroy] 
+1

Sie müssten zeigen, was Sie in Ihrer routes.rb-Datei haben – fanta

+0

@fanta Routen hinzugefügt. – DavidK

+2

Ich sehe, Sie versuchen, auf die 'show' Aktion umzuleiten, aber Sie haben nur Ihre Routen für' new' und 'create' definiert, fügen Sie dort' show' hinzu: 'resources: posts, only: [: new ,: create,: show] ' – fanta

Antwort

0

resources :posts, only: [:new, :create] entfernen und setzen nur resources :posts. Auf diese Weise haben Sie würden die post_path(@post) Sie versuchen, was Sie brauchen, Show

0

Erstens zu umleiten Aktion in Ihren erlaubt Routen

resources :posts, only: [:new, :create, :show] 

und dann können Sie einfach diese Aktion in Ihrem tun erstellen

def create 
    @post = current_user.posts.new(post_params) 
    if @post.save 
    redirect_to @post 
    else 
    render :new 
    end 
end 

Es sollte gut funktionieren.

Verwandte Themen