1

投稿モデルにコメントを追加しようとしています

class Comment < ActiveRecord::Base
    belongs_to :post
    belongs_to :user #should this be has_one :user instead?
....

current_userと現在の投稿の両方を取得するために、コメントの新規アクションと作成アクションを設定するにはどうすればよいですか?

guides.rubyonrails.orgが提案しました

コントローラ:

def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.create(params[:comment])
    redirect_to post_path(@post)
end

意見

<%= form_for([@post, @post.comments.build]) do |f| %>
...

ただし、これは投稿に関連付けることのみを目的としているようであり、ユーザーにも関連付けられていないようです。どうすれば両方の関連付けを設定できますか?

4

2 に答える 2

6

current_user()コントローラのどこかにメソッドがあると思います。

だからこれはそれをするべきです:

def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.build(params[:comment])
    @comment.user = current_user
    @comment.save
    redirect_to post_path(@post)
end
于 2012-04-05T22:47:50.107 に答える
0

デラドンは質問にうまく答えましたが、私は新しいコメントフォーム自体にそのロジックを含めることを好みます。たとえば、これらの変数を呼び出す代わりに、次のようにすることができます。

app / views / comments / _form.html.erb:

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

これはもちろん、新しいコメントフォームが「postshow」ページに埋め込まれていることを前提としているため、@postが利用可能になります。

app / views / posts / show.html.erb:

<body>
  <%= render @post %>
  <%= render 'comments/_form' %>
</body>

これにより、post_idとuser_idがdbに直接追加され、新しいコメントが表示されます。また、データベースがより迅速にアクセスできるように、これらの外部キーのインデックスを作成することを忘れないでください。方法がわからない場合は、グーグルで検索してください。

于 2013-12-01T21:06:12.430 に答える