我有一个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
答案 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