我有两个具有has_many / has_many关系的模型。我有一个变量exp_ids
,它是一个整数数组,表示一些ExperienceLevel
记录的id。我需要编写一个查询,选择所有JobDescription
个ExperienceLevel
,其中包含其中一个ID。
查询必须对名为job_descriptions
的现有ActiveRelation对象起作用,该对象通过控制器中的某些流控制传递,以根据我的参数过滤结果。
我在下面尝试了这些查询以及其他一些变体,但收效甚微。据我所知,ActiveRecord认为experience_levels
是一个属性,导致它失败。
job_descriptions.where(experience_levels: exp_ids)
job_descriptions.joins(:experience_levels).where(experience_levels.id: exp_ids)
job_descriptions.joins(:experience_levels).where(experience_levels: exp_ids)
job_descriptions.joins(:experience_levels).where("experience_levels.id IN exp_ids")
job_descriptions.includes(:experience_levels).where("experience_levels.id = ?", exp_ids).references(:experience_levels)
以下是我的模特:
class JobDescription < ActiveRecord::Base
has_many :job_description_experience_levels
has_many :experience_levels, through: :job_description_experience_levels
end
class JobDescriptionExperienceLevel < ActiveRecord::Base
belongs_to :job_description
belongs_to :experience_level
end
class ExperienceLevel < ActiveRecord::Base
has_many :job_description_experience_levels
has_many :job_descriptions, through: :job_description_experience_levels
end
我不确定我想做什么是可能的。我在另一个job_description
过滤器中使用了类似的方法,我选择了company_id
,但在这种情况下,company_id
是JobDescription
的属性。
答案 0 :(得分:1)
试试这个:
job_descriptions.joins(:job_description_experience_levels).where(job_description_experience_levels: { experience_level_id: exp_ids })
答案 1 :(得分:1)
job_descriptions.joins(:experience_levels).where(experience_levels:{id:exp_ids})
答案 2 :(得分:0)
试试这个。注意经验水平缺乏复数.id
job_descriptions.includes(:experience_levels).where("experience_level.id = ?", exp_ids).references(:experience_levels)