所以我正在尝试编写一个查询来根据他们的技能获取用户,实现如下:
用户具有使用acts_as_taggable_on
这是我现在的范围
scope :by_skills, (lambda do |primary, secondary|
if primary.present? && secondary.present?
tagged_with(primary, on: :primary_skills, any: true)
.tagged_with(secondary, on: :secondary_skills, any: true)
elsif primary.present?
tagged_with(primary, on: :primary_skills, any: true)
elsif secondary.present?
tagged_with(secondary, on: :secondary_skills, any: true)
end
end)
现在的问题是,如果主要和&如果存在secondary,则触发的查询将是AND
,即主要和次要,
我希望它是一个OR
,而且我无法理解
答案 0 :(得分:2)
尝试在Rails 5中引入or
。
scope :by_skills, (lambda do |primary, secondary|
if primary.present? && secondary.present?
tagged_with(primary, on: :primary_skills, any: true).or(
tagged_with(secondary, on: :secondary_skills, any: true))
elsif primary.present?
tagged_with(primary, on: :primary_skills, any: true)
elsif secondary.present?
tagged_with(secondary, on: :secondary_skills, any: true)
end
end)
答案 1 :(得分:0)
我最终使用了@archana提到的Rails 5中引入的ActiveRecord的or
方法。
但在我开始使用之前,我试图找到另一种方法来做同样的事情,并看一下acts_as_taggable_on
的设计方式。
即使有两个不同的关联,称为primary_skills
& secondary_skills
两者确实是同一个表格tags
的关联,其中有一个直通表taggings
这意味着users
表与tags
表有关联,认为现在一切都更清楚了。解决方案是这样的:
Users.includes(:primary_skills, :secondary_skills).where(tags: { name: (primary + secondary) })
这适用于支持acts_as_taggable_on
的所有rails版本。