1

UsersComments、および3 つの足場が あります。Movies

私のアプリでは、ユーザーコメントしてもらいたいのですMoviesが、さまざまなユーザーがページにコメントMovieできます。

ユーザーが映画にコメントを追加し、映画ページにすべてのコメントを表示できる関連付けコードを作成するにはどうすればよいですか? コメントをカウントするコードも教えてください。コメントの数を整数で表示してください。

私がこれまでに得たもの

Subject および Body Movies テーブルを含む Comments テーブル、Users テーブル

user.rb

has_many: comments

映画.rb

has_many: comments

コメント.rb

belongs_to :users
belongs_to :movies

ありがとう !

4

3 に答える 3

2

必要な関連付けは、それらが何に属しているかを伝えることです。そのため、モデルで次のことを行う必要があります。

コメント モデル:

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.' }
于 2013-06-06T15:23:36.443 に答える
0

あなたが持っている可能性があります:

class User < ActiveRecord::Base
  has_many :comments, :dependent => :destroy
end

class Comment< ActiveRecord::Base
  belongs_to :user
  belongs_to :movie
end

class Movies< ActiveRecord::Base
  has_many :comments, :dependent => :destroy
end

あなたの見解では、次のようなことができます:

Number of comments : <%= @movie.comments.length %>
<% @movie.comments.each do |comment| %>
  Pseudo : <%= comment.user.pseudo%>
  Body : <%= comment.body %>
<% end %>

Rails から始める場合は、このチュートリアルをご覧ください。基本的には素晴らしいです;)

于 2013-06-06T15:23:23.350 に答える
0

users.rb 内

has_many :movies, through: :comments

movie.rb 内

has_many :users, through: comments

これは、has-many-through関連付けと呼ばれます。ここを参照してください。

カウントする:

number_of_comments = Comment.all.size
number_of_comments_on_a_movie = Movie.find(movie_id).comments.size
number_of_comments_by_a_user = User.find(user_id).comments.size
于 2013-06-06T15:23:35.727 に答える