Rails 5 hasMany через не фильтрует - PullRequest
3 голосов
/ 07 июля 2019

Я мигрирую с Rails 4 на Rails 5 и попал в эту проблему. У меня есть отношение hasMany through для соединения классов Track и RightHolder:

class RightHolder < ActiveRecord::Base
  has_many :right_holder_tracks, class_name: 'TrackRightHolder', dependent: :delete_all
  has_many :tracks, -> { uniq }, through: :right_holder_tracks
end

class TrackRightHolder < ActiveRecord::Base
  belongs_to :track
  belongs_to :right_holder
end

class Track < ActiveRecord::Base
  has_many :track_right_holders, dependent: :destroy
  has_many :right_holders, -> { uniq }, through: :track_right_holders
end

В Rails 4 это работало отлично, но в Rails 5, когда я пытаюсь получить:

Track.first.right_holders
RightHolder.first.tracks

Приложение Rails выполняет следующие запросы:

select * from right_holders
select * from tracks

Что я делаю не так? Это ошибка?

Ответы [ 2 ]

3 голосов
/ 07 июля 2019

В Rails 5 отношение uniq устарело в пользу distinct: https://edgeguides.rubyonrails.org/5_0_release_notes.html#active-record-deprecations

Дополнительная информация в этот ответ

1 голос
/ 07 июля 2019

просто изменить { uniq } на { distinct }

...