1

私はネストされたリソースを持っていますが、ブログで見られる「投稿」/「コメント」の関係とは異なりません。

投稿の#showイベントで、新しいコメントのフォームを表示します。その下には、その投稿の以前のコメントがすべて表示されます。

コントローラ内の#showメソッドは次のようになります。

def show
    @post = Post.find(params[:id])
    @comment = @post.comments.build

さて、これに関する問題は、@page.commentsコレクション内に空の未保存のエンティティがあることです。結果として、コメントをリストしているときの私の見解の中で、私は次のようなことをします。

<%= comment.created_at.strftime("%a, %d %b %Y %H:%M:%S") %>

例外がスローされます:

undefined method `strftime' for nil:NilClass

#showコントローラーを切り替えて、postオブジェクトを介して新しいコメントのスコープを設定しないように修正しようとしましたが、検証エラーでフォームにリダイレクトされた場合でも、同じ問題が発生します。

誰かアドバイスはありますか?

4

1 に答える 1

0

私はこれと同じ問題を抱えていました。実際にコレクションに追加せずに、コレクションを介して子オブジェクトを構築する正当な方法はないようです。

したがって、代わりに:

@post = Post.find(params[:id])
@comment = @post.comments.build

そうです:

@post = Post.find(params[:id])
@comment = Comment.new(:post => @post)

同じ方法で子オブジェクトを構築しますが、親コレクションには追加しないため、リストはエラーなしで構築されます。これは私がやりたい方法ではありませんが、ワークフローへの最小限の変更で同じことを達成するための最良の方法のようです。

于 2013-03-31T20:52:37.420 に答える