1

我有两张桌子,电影和喜欢。一部电影之has_many :likes, dependent: :destroy, foreign_key: "movie_id"类的belongs_to :movie

在 Likes 控制器中有两个动作:uplikes (where :vote=>1)dislikes (where :vote=>2)

movies/show.html.erbI 中显示了这部电影的喜欢和不喜欢的数量,因此:

  • 查看 show.html.erb

<%= @uplikes.size %>

<%= @dislikes.size %>

  • 控制器def show

@uplikes = Like.where(:movie_id => params[:id], :vote => '1')

@dislikes = Like.where(:movie_id => params[:id], :vote => '2')

这很好用。现在我遇到的问题是在调用movies.each时在索引操作中显示电影的不喜欢和喜欢的数量

我已将上述控制器代码从def show动作粘贴到def index动作并更改params[:id]params[:movie_id]

但是当我打电话时

<%= @uplikes.size %>

<%= @dislikes.size %>

到视图,它只显示 0

如果我:movie_id => params[:id],在控制器中删除,它会显示所有电影的所有喜欢和不喜欢的数量,而不是特定的电影。

有人对此有答案吗?

谢谢

4

1 回答 1

3

在索引中,您正在遍历所有(或者可能是由于分页而导致的子集)电影,对吗?一个天真的实现将是

在控制器中

def index
   @movies = Movie.all 
end 

在 index.html.erb 中

   <% @movies.each do | movie |  
          uplikes = movie.likes.where(vote: 1).count 
          dislikes = movie.likes.where(vote: 2).count 
   %>

       ... output logic here ...
   <% end %>

或者您可以执行以下操作

在你的电影.rb

 has_many :uplikes, -> {where vote: 1 }, class_name: 'Like'
 has_many :dislikes, -> {where vote: 2}, class_name: 'Like'

那么你可以 在你的视图中 使用movie.uplikes.count或。movie.dislikes.count

于 2013-08-07T15:44:09.273 回答