Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 跟踪记录已添加的次数_Ruby On Rails - Fatal编程技术网

Ruby on rails 跟踪记录已添加的次数

Ruby on rails 跟踪记录已添加的次数,ruby-on-rails,Ruby On Rails,我有一个rail/angular应用程序,用户可以将电影添加到他们的观察列表中。我还有一个建议列表,这个列表有所有用户可以看到的所有电影对象。目前,我正在尝试向它添加一些orderBy功能。我可以在发行日订购,也可以在创建时订购,但我想添加根据受欢迎程度订购的选项(因此一部电影被添加了多少次),但我不知道如何跟踪这些数据 这是我的电影控制器中的创建功能 def create @movie = Movie.find_or_create_by movie_params @movie.tr

我有一个rail/angular应用程序,用户可以将电影添加到他们的观察列表中。我还有一个建议列表,这个列表有所有用户可以看到的所有电影对象。目前,我正在尝试向它添加一些orderBy功能。我可以在发行日订购,也可以在创建时订购,但我想添加根据受欢迎程度订购的选项(因此一部电影被添加了多少次),但我不知道如何跟踪这些数据

这是我的电影控制器中的创建功能

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