2016-04-02 3 views
0

Я пишу простой веб-сайт, в котором пользователи (прошедшие проверку подлинности с помощью Devise) могут создавать сообщения. После создания нового сообщения я столкнулся с этой ошибкой, в которой он не будет перенаправляться на сообщение. Вот мои Сообщения контроллер:rails - NoMethodError в PostsController # create undefined method `post_url '

class PostsController < ApplicationController 
    before_filter :authenticate_user! 

    def new 
    @post = current_user.posts.new 
    end 

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

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

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

Вот мой routes.rb:

Rails.application.routes.draw do 
    devise_for :users 
    resources :users do 
    resources :posts 
    end 
    root 'posts#new' 
end 

Поскольку сообщения ресурс вложен в пользователях я думал, что, возможно, я должен иметь это в моем контроллере:

if @post.save 
     redirect_to [email protected] 
    end 

Но это создает ошибку SyntaxError в PostsController # create.

Может ли кто-нибудь увидеть проблему, которая препятствует перенаправлению контроллера на сообщение после его создания? Любая помощь приветствуется.

ответ

3

Попробуйте это -

redirect_to [current_user,@post] 

ИЛИ,

redirect_to user_post_path(current_user, @post) 

надеюсь, что это помогает!

+0

Похоже, что он должен работать, но теперь я получаю: Нет совпадения маршрутов {: action => "show",: controller => "posts",: id => nil,: user_id => # } отсутствуют требуемые ключи: [: id] По какой-то причине кажется, что идентификатор передается неправильно. –

+0

@AdamLazarus Да, он ищет идентификатор пользователя. Я отредактировал ответ, пожалуйста, попробуйте один раз. – dp7

+0

Не повезло! Он по-прежнему дает ту же ошибку. Я попробовал это с [current_user, @post], и это тоже не сработало. В сообщении об ошибке указано: id => nil и отсутствуют необходимые ключи: [: id], так что это не проблема с тем, что идентификатор новой почты не передается на маршрут правильно? –

0

В вашей модели разрешены ли вы вложенные атрибуты? В контроллере вы хотите использовать сборку вместо нового.

+0

Да, у меня есть. Каким будет преимущество использования сборки вместо новой? У меня создалось впечатление, что они - псевдонимы друг друга. –