跟踪记录添加的次数

时间:2016-01-10 09:21:56

标签: ruby-on-rails

我有一个rails / angular应用程序,用户可以将电影添加到他们的监视列表中。我也有建议列表,这个列表包含了所有用户都可以看到的所有电影对象。目前我正在尝试添加一些orderBy功能。我可以在release_date和created_at上订购但是我想添加一个按流行度排序的选项(所以添加了多少次电影)但是我对如何跟踪这些数据感到迷茫。

这是我的movie_controller中的创建函数,

def create
   @movie = Movie.find_or_create_by movie_params
   @movie.trailers.build(params[:trailer])
   current_user.movies << @movie
   redirect_to :root
   current_user.followers.each { |follower| @movie.create_activity(key: 'movie.create', owner: current_user, recipient: follower) }
end

据我所知(以及我所看到的),当我的数据库中已存在的电影不会重复时,会创建current_user和电影之间的链接。

我也使用连接模型在用户和电影之间创建链接,虽然我不确定在这种情况下需要信息,

电影模特,

has_and_belongs_to_many :users

用户模型,

has_and_belongs_to_many :movies

2 个答案:

答案 0 :(得分:0)

首先,在电影模型

中创建>>> m = MailItem('Pyderman') >>> isinstance(m, Package) False (您想要的任何名称)列

其次,定义after_add回调

added_count

答案 1 :(得分:0)

建议使用has_many_through而不是has_and_belongs_to_many。 Rails文档本身建议您使用has_many through而不是has_and_belongs_to_many,这会让事情变得更容易。

如果你这样做,你可以添加counter_cache并让Rails处理剩下的事情。

class Movie
  has_many :movie_adds
  has_many :users, through: :movie_adds
end
class User
  has_many :movie_adds
  has_many :movies, through: :movie_ads
end
class MovieAdd
  belongs_to :user
  belongs_to :movie, counter_cache: true
end

添加列:

add_column :movies, :movie_adds_count, :integer, default: 0

最后,按受欢迎程度添加范围:

class Movie
  # ...
  scope :popular, -> { order(movie_adds_count: :desc) }
end