首页 > 解决方案 > Rails 5 hasMany through 没有过滤

问题描述

我正在从 Rails 4 迁移到 Rails 5 并遇到了这个问题。我有hasMany through连接TrackRightHolder类的关系:

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

我究竟做错了什么?这是一个错误吗?

标签: ruby-on-railsrails-activerecordhas-many-through

解决方案


在 Rails 5 中,关系uniq被弃用,取而代之的是distincthttps ://edgeguides.rubyonrails.org/5_0_release_notes.html#active-record-deprecations

此答案中的更多信息


推荐阅读