Rails 基于关联的顺序无法正常工作

Rails order based on association doesn't work properly

我正在尝试按 release_date 对电影进行排序,但它无法正常工作

@movies = Movie.where(id: movie_ids).recent

如果我使用相反的范围 (:old),它可以工作,但不能使用 (:recent)

# Movie.rb

# Associations  
has_many :movie_countries, dependent: :destroy
has_many :countries, through: :movie_countries

# Scopes
scope :recent,    -> { includes(:movie_countries).order('movie_countries.release_date DESC') }
scope :old,       -> { includes(:movie_countries).order('movie_countries.release_date ASC') }

示例:

MovieCountry id: 1, movie_id: 1, release_date: '2018-01-01'
MovieCountry id: 2, movie_id: 2, release_date: '2019-01-01'
MovieCountry id: 3, movie_id: 3, release_date: '2020-01-01'

movies = Movie.recent
movies => [movie id: 1, movie id: 3, movie id: 2]

movies = Movie.old
movies => [movie id: 1, movie id: 2, movie id: 3]

如您所见,:old 作用域正常但 :recent

真实数据回溯:

我找到了解决此问题的替代方法:

# Movie.rb
scope :old,       -> {includes(:movie_countries).order('movie_countries.release_date ASC') }
scope :recent,    -> { old.reverse }

解决方案

感谢 我找到了解决方案

# Movie.rb
scope :recent,    -> (iso_code = 'FR') { includes(:movie_countries).where(movie_countries: {iso_code: iso_code}).order('movie_countries.release_date DESC') }

问题是我的电影有 2 个 movie_countries

[#<MovieCountry id: 8, country_id: 2, movie_id: 5, release_date: "2018-12-10", iso_code: "GB", created_at: "2018-10-23 15:23:09", updated_at: "2018-10-23 15:23:09">, 
 #<MovieCountry id: 7, country_id: 1, movie_id: 5, release_date: "2018-10-24", iso_code: "FR", created_at: "2018-10-23 15:23:09", updated_at: "2018-10-23 15:23:09">]

我必须在 movie_countries 中搜索特定国家/地区,然后对它们进行排序。