Ruby on rails 跟踪记录已添加的次数
我有一个rail/angular应用程序,用户可以将电影添加到他们的观察列表中。我还有一个建议列表,这个列表有所有用户可以看到的所有电影对象。目前,我正在尝试向它添加一些orderBy功能。我可以在发行日订购,也可以在创建时订购,但我想添加根据受欢迎程度订购的选项(因此一部电影被添加了多少次),但我不知道如何跟踪这些数据 这是我的电影控制器中的创建功能Ruby on rails 跟踪记录已添加的次数,ruby-on-rails,Ruby On Rails,我有一个rail/angular应用程序,用户可以将电影添加到他们的观察列表中。我还有一个建议列表,这个列表有所有用户可以看到的所有电影对象。目前,我正在尝试向它添加一些orderBy功能。我可以在发行日订购,也可以在创建时订购,但我想添加根据受欢迎程度订购的选项(因此一部电影被添加了多少次),但我不知道如何跟踪这些数据 这是我的电影控制器中的创建功能 def create @movie = Movie.find_or_create_by movie_params @movie.tr
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
用户模型
has_and_belongs_to_many :movies
首先,在电影模型中创建
added\u count
(任意名称)列
其次,在添加回调后定义
has_and_belongs_to_many :movies, after_add: :increment_movie_added_count
def increment_movie_added_count(movie)
movie.increment(:added_count)
end
建议使用
has\u many\u至而不是has\u和\u belien\u to \u many
。Rails文档本身建议您使用has\u many to
而不是has\u and\u belies\u to\u many
,这使事情变得更简单
如果您这样做,您可以添加一个,并让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
最后,按流行程度向order添加一个范围:
class Movie
# ...
scope :popular, -> { order(movie_adds_count: :desc) }
end
谢谢你的意见。我已经在我的用户模型中添加了建议的代码,但是当我添加电影时,added\u count
的值没有改变。@peterboomma您能在添加回调后尝试阅读吗谢谢您的建议,但是建议中的MovieAdd
是什么?
class Movie
# ...
scope :popular, -> { order(movie_adds_count: :desc) }
end