ActiveRecord:has_many选择限于另一个模型的has_many

时间:2019-06-18 16:35:08

标签: ruby-on-rails ruby activerecord

我想实现以下目标,其中PersonSubject有许多主题,但是这些主题的选择仅限于通过另一种模型(即:通过关联的{{ 1}}):

topics

然后,我希望删除任何subject(或删除关联),它将自动更新class Topic < ApplicationRecord belongs_to :subject end class Subject < ApplicationRecord has_many :topics end class PersonSubject < ApplicationRecord belongs_to :person belongs_to :subject has_many :topics # where the choices are limited to the subject.skills end ,使其不再“指向” person_subject.subject.topics删除。

这可能吗?

1 个答案:

答案 0 :(得分:0)

您可以使用lambda将任意过滤器放在关联上。参见What is the equivalent of the has_many 'conditions' option in Rails 4?

has_many :topics, -> { where(skill: subject.skills) }

我不知道这是确切的代码,如果不查看您的架构(subject.skills的数据类型是什么,以及如何将其与主题结合在一起?)就可以使用。但希望这能使您走上正轨

编辑

我想回应您的评论

has_many :topics, through: :skills

会工作