必要な関連付けは、それらが何に属しているかを伝えることです。そのため、モデルで次のことを行う必要があります。
コメント モデル:
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :movie
end
ユーザー モデル:
class User < ActiveRecord::Base
has_many :comments
end
映画モデル:
class Movie < ActiveRecord::Base
has_many :comments
end
外部キー列をコメント テーブルに追加するには、移行を生成する必要があります。それができたら、あとは ID を介して映画とユーザーにコメントを添付するだけです。次に、コメントを表示するには、ビューに次のようにします。
<% @movie.comments.each do |comment| %>
<%= comment.text %>
<% end %>
編集: コメントを作成するには、新しいコメントを追加するためのリンクが必要です。ビューで:
<%= link_to 'New Comment', new_movie_comment_path(@movie) %>
これにより、新しいコメント ビューとそのフォームが表示されます。フォームでは、ユーザーをコメントに関連付ける隠しフィールドを設定することで、コメントをユーザーに関連付けることができます。コメント フォーム ビューで:
<%= form_for(@comment) do |f| %>
<%= f.label :user %>
<%= f.hidden_field :comment, :user_id, current_user_id %>
<% end %>
最後の部分は、セッションがアクティブであることを前提としています。
編集2:
ルートでは、movies リソース内にコメント リソースをネストします。
resources :movies do
resources :comments
end
編集3:
コメント コントローラーで、アクションをムービーに向ける必要があります。コントローラーで
class CommentsController < ApplicationController
before_filter :load_movie
private
def load_movie
@movie = Movie.find(params[:movie_id])
end
プライベート セクションは、コントローラの下部にある必要があります。それが完了したら、@movie を使用するようにアクションを更新します。
def index
@comments = @movie.comments.all
end
コントローラーの show 、 new などのアクションに対してそれを行います。create アクションと update アクションでは、html リダイレクトを更新する必要があります。
format.html { redirect_to (@movie, @comment), notice: 'Comment was successfully created.' }
と
format.html { redirect_to (@movie, @comment), notice: 'Comment was successfully Updated.' }