搜索和翻译
Ransack search and translations
我正在尝试对与翻译相关联的模型进行搜查 table。
翻译由 globalize gem 管理。
问题是当我尝试在模型 table 的 :name 列中搜索搜索时,它什么也没显示,因为 :name 信息存储在另一个 table.
有什么线索可以在协会翻译中进行搜查吗table?我知道有可能使用掠夺者,但我不知道应该在其中输入什么代码。
Globalize 为您提供 with_translations 的 class 方法,例如:
User.with_translations('en')
因此您可以在您的模型上设置自己的范围,利用它,例如:
def self.with_translated_name(name_string)
with_translations(I18n.locale).where('user_translations.name' => name_string)
end
然后您可以在相关模型中公开此 scope in your ransackable_scopes array,例如:
private
def self.ransackable_scopes
%i(with_translated_name)
end
有了这些,您应该能够做到:
User.ransack({ with_translated_name: "John" })
虽然@rlarcombe 他的回答在这种特定情况下有效,但您放弃了 ransack 提供的所有谓词(eq、cont 等),基本上是自己编写搜索查询。
Globalize 将翻译 table 添加为关联,并且 ransack 通过在可搜索属性前加上关联的 table 名称提供搜索关联 table 的能力。
对于你的情况,这会起作用,并且仍然允许你使用所有的 ransack 谓词。
User.with_translations(I18n.locale).ransack(translations_name_eq: 'John')
您可以使用 cont
(包含)等其他谓词进行 ILIKE
匹配,只需替换谓词后缀:
User.with_translations(I18n.locale).ransack(translations_name_cont: 'John')
我正在尝试对与翻译相关联的模型进行搜查 table。
翻译由 globalize gem 管理。
问题是当我尝试在模型 table 的 :name 列中搜索搜索时,它什么也没显示,因为 :name 信息存储在另一个 table.
有什么线索可以在协会翻译中进行搜查吗table?我知道有可能使用掠夺者,但我不知道应该在其中输入什么代码。
Globalize 为您提供 with_translations 的 class 方法,例如:
User.with_translations('en')
因此您可以在您的模型上设置自己的范围,利用它,例如:
def self.with_translated_name(name_string)
with_translations(I18n.locale).where('user_translations.name' => name_string)
end
然后您可以在相关模型中公开此 scope in your ransackable_scopes array,例如:
private
def self.ransackable_scopes
%i(with_translated_name)
end
有了这些,您应该能够做到:
User.ransack({ with_translated_name: "John" })
虽然@rlarcombe 他的回答在这种特定情况下有效,但您放弃了 ransack 提供的所有谓词(eq、cont 等),基本上是自己编写搜索查询。
Globalize 将翻译 table 添加为关联,并且 ransack 通过在可搜索属性前加上关联的 table 名称提供搜索关联 table 的能力。
对于你的情况,这会起作用,并且仍然允许你使用所有的 ransack 谓词。
User.with_translations(I18n.locale).ransack(translations_name_eq: 'John')
您可以使用 cont
(包含)等其他谓词进行 ILIKE
匹配,只需替换谓词后缀:
User.with_translations(I18n.locale).ransack(translations_name_cont: 'John')