仅当子项具有特定属性时才查询对象

opt*_*con 3 ruby activerecord ruby-on-rails

我有几个模型定义如下:

class Question < ActiveRecord::Base
  has_many :skill_tags, as: :skillable
end

class SkillTag < ActiveRecord::Base
  belongs_to :skillable, polymorphic: true
  belongs_to :skill
end

class Skill < ActiveRecord::Base
  has_and_belongs_to_many :skill_tags
end
Run Code Online (Sandbox Code Playgroud)

我想获得一个具有与之相关的特定技能的所有Question对象的数组.

例如 - 我想要所有具有技能标签的问题,其技能为16,34和89.这些可以在数组中.实现这一目标的Rails最友好的方式是什么?我可以想到一些更"蛮力"的方法,但我希望它尽可能干净.

Sli*_*pan 9

像这样的东西应该做的伎俩:

Question.joins(:skill_tag).where(:skill_tags => {:skill_id => [16, 34, 89]})
Run Code Online (Sandbox Code Playgroud)