【发布时间】:2019-10-14 19:29:18
【问题描述】:
我正在使用globalize gem 向我的网站添加无线电
我有一个复杂的问题,我有一个搜索引擎来过滤活动
这是我的两个模型:
class Activity < ActiveRecord::Base
belongs_to :category
translates :name, :description
end
class Category < ActiveRecord::Base
has_many :activities
translates :name
end
我用 gem 生成了他们的表,我有 activities 和 activity_translations、categories 和 category_translations
我要翻译的字段(你可以在他们的模型中看到)在他们的翻译表中,如果我想按名称搜索 activities 或 categories 我必须在他们的翻译表中搜索它们
对于活动来说,这很容易:
activities = Activity.with_translations.where(event_id: event_id)
activities = activities.where('activity_translations.name LIKE :query', query: "%#{query}%")
但我的问题是我想用相同的查询过滤activities by name 和categories by name,因为我必须输入他们的翻译表,就像活动中的类别一样可选
我正在尝试这个:
activities = Activity.with_translations.where(event_id: event_id)
activities = activities
.joins("LEFT OUTER JOIN categories ON activities.category_id = categories.id INNER JOIN category_translations ON category_translations.category_id = categories.id")
.where('activity_translations.name LIKE :query OR activity_translations.description LIKE :query OR category_translations.name LIKE :query', query: "%#{query}%")
但这不起作用只会返回具有类别的活动
有什么建议吗?
【问题讨论】:
-
嗯,也许只是做一个子查询而不是加入?
OR WHERE category_id IN (SELECT category_id FROM category_translations WHERE category_translations.name LIKE :query).