0
我試圖重構,有很多的has_many的型號範圍:通過涉及在連接表的條件協會Rails的避免重複加入對已加入和合並
class Assignment
has_many :assignment_reviewers
has_many :preferred_assignment_reviewers, -> { preferred }
# more of these for different types of reviewers
has_many :reviewers, through: :assignment_reviewers
has_many :preferred_reviewers, through: :preferred_assignment_reviewers
# more of these
我添加了以下範圍在審閱
class Reviewer
scope :preferred, -> do
joins(:assignment_reviewers).merge(AssignmentReviewer.preferred)
,這樣我可以做
assignment.reviewers.preferred
,而不是使用的has_many
assignment.preferred_reviewers
但是,在重複INNER前者結果JOIN
INNER JOIN `assignment_reviewers` `assignment_reviewers_reviewers`
ON `assignment_reviewers_reviewers`.`reviewer_id` = `reviewers`.`id`
INNER JOIN `assignment_reviewers`
ON `reviewers`.`id` = `assignment_reviewers`.`reviewer_id`
看來我有三種選擇:
- 保持定義has_manys和的has_many:得來的每一個(缺點:很多在已經是神級的模型上的特定關聯)
- 使用範圍(下側:重複連接)
使用合併直接
assignment.reviewers.merge(AssignmentReviewer.preferred)
(缺點:不是能言善辯)
我傾向於選擇選項2,因爲更清晰的代碼,我猜測額外的加入不會對績效有重大影響。
任何建議/有沒有更好的選擇,我錯過了?