Rails用户对电影的评论

我有三个脚手架用户评论Movies

在我的应用程序中,我希望用户 评论 Movies ,不同的用户可以评论 Movie页面。

如何创建关联代码,让用户在电影上添加评论,然后在电影页面上显示所有评论? 请你告诉我计算评论的代码,所以显示有多少评论并以整数显示

到目前为止我得到了什么

带有主题和正文电影表用户表的注释表

user.rb

 has_many: comments 

movies.rb

 has_many: comments 

comments.rb

 belongs_to :users belongs_to :movies 

谢谢 !

您需要的关联是告诉他们属于什么。 所以你需要在模型中做以下事情:

评论模型:

 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:

在路径中,您可以将评论资源嵌套在电影资源中:

 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等操作执行此操作。 在创建操作和更新操作中,您需要更新html重定向。

 format.html { redirect_to (@movie, @comment), notice: 'Comment was successfully created.' } 

 format.html { redirect_to (@movie, @comment), notice: 'Comment was successfully Updated.' } 

在users.rb中

 has_many :movies, through: :comments 

在movies.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 

你可能有 :

 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开始,你应该看一下本教程 。 对于基础知识来说真棒!)