我有三个脚手架
用户,评论和Movies
在我的应用中,我希望<{1}}上的用户 评论,而{{1}上的不同用户可以评论页面。
如何创建允许用户在电影上添加评论的关联代码,然后在电影页面上显示所有评论?请你告诉我计算评论的代码,所以显示有多少评论并以整数显示
到目前为止我得到了什么
包含主题和正文的评论表 电影表 用户表
user.rb
Movies
movies.rb
Movie
comments.rb
has_many: comments
谢谢!
答案 0 :(得分: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:
在路线中,您可以将评论资源嵌套在电影资源中:
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.' }
答案 1 :(得分: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开始,你应该看看这个tutorial。这对于基础知识来说非常棒;)
答案 2 :(得分:0)
在users.rb
中has_many :movies, through: :comments
在movies.rb
has_many :users, through: comments
这称为 has-many-through 关联。参考here。
要算:
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