2016-04-02 22 views
0

私はDeviseで認証されたユーザーが投稿を作成できるシンプルなWebサイトを作成しています。新しい投稿を作成すると、このエラーに遭遇して投稿にリダイレクトされません。ここに私の投稿コントローラだ:rails - PostsControllerのNoMethodError#未定義メソッド `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 

しかし、それはPostsController#create errorでSyntaxErrorを生成します。

コントローラが作成された後にコントローラが投稿にリダイレクトされないという問題を誰も見てもらえますか?どんな助けでも大歓迎です。

答えて

3

これを試してみてください -

redirect_to [current_user,@post] 

OR、

はそれが役に立てば幸い!

+0

これはうまくいくはずですが、今は私が得たようです: {:action => "show"、:controller => "posts"、:id => nil、:user_id =>#}必須キーがありません:[:id] 何らかの理由で、IDが正しく渡されていないようです。 –

+0

@AdamLazarusはい、ユーザーIDを探しています。私は答えを編集して、一度それを試してみてください。 – dp7

+0

運がいいえ!それでも同じエラーが発生します。 [current_user、@post]でも試してみましたが、うまくいきませんでした。エラーメッセージには、id => nilとrequired keys:[:id]がありませんので、新しい投稿IDが経路に正しく渡されていないと問題はありませんか? –

0

モデルでは、ネストされた属性を許可していますか?コントローラでは、新しいものの代わりにビルドを使用します。

+0

はい、あります。新しいものの代わりにビルドを使う利点は何ですか?私は彼らがお互いのエイリアスであるという印象を受けました。 –

関連する問題