0

私はRubyonRailsにかなり慣れていません。ユーザーが投稿を作成できるようにする基本的なユーザー/投稿モデルを設定しました。投稿のコメントを作成しようとしています。これにより、コメントを作成したユーザーにもコメントが関連付けられます。

ユーザーが多くの投稿とコメントを持ち、投稿がユーザーに属し、多くのコメントを持ち、コメントが投稿とユーザーの両方に属するように、関係を設定しました。

コメントを保存しようとすると問題が発生します。私のコメントコントローラーでは:

def create
    @comment = current_user.comments.build(params[:comment])
end

これは機能せず、コメントの投稿がどの投稿に属するかについては何も言いません。投稿の下にコメントウォールを作成するために、[投稿の表示]ページに[コメントの追加]フォームも表示していますが、フォームにはまだ

<%= form_for @comment do |f| %>

また、[表示]の下の[投稿]コントローラーの投稿にコメントを関連付けません。

おそらく簡単な答えがあると思いますが、私の特定の問題を説明するリソースを見つけることができませんでした。どんな助けでも大歓迎です。

4

3 に答える 3

1

あなたは主に特定の投稿にコメントを追加していると思います。だからそこから始めましょう:

def create
  @post = Post.find(params[:post_id])  # <== this may be just `id`
  @comment = @post.comments.build(params[:comment])
  @comment.user = current_user

  if @comment.save
    # ... do things
  else
    # ..  render error
  end
end

これを機能させるには、ルートをネストする必要があります。

resources :posts do
  resources :comments
end

そしてform_for、ネストされたルートを示す必要があります。

<%= form_for [@post, @comment] %>
于 2013-02-20T17:45:29.147 に答える
1

あなたはCommentsController#createで正しいことをしています

@comment = current_user.comments.build(params[:comment])

欠落している部分は、params [:comment]にpost_idを含めることです。コメントしている投稿、つまり表示している投稿を常に知っているので、これは問題ありません。だからあなたの中に以下を追加してくださいform_for @comment

<%= f.hidden_field :post_id, @post.id %>

これはshowpostビューにあり、PostController#showに@postを設定していると思います。

于 2013-02-20T17:50:19.047 に答える
0

できるよ:

def create
  @comment = Comment.new(params[:comment])
  @comment.user = current_user
  if @comment.save ...
于 2013-02-20T17:35:59.337 に答える