Ransack搜索和翻译

时间:2015-11-30 13:23:45

标签: ruby-on-rails search translation ransack globalize

我正在尝试对与转换表关联的模型进行搜索。

翻译由globalize gem管理。

问题是当我尝试在名称列中的模型表中搜索ransack时,它没有显示任何内容,因为:名称信息存储在另一个表中。

任何线索如何在关联转换表中进行搜索搜索?我知道有可能使用搜索者,但我不知道将哪些代码放入其中。

2 个答案:

答案 0 :(得分:2)

Globalize为您提供with_translations的类方法,如:

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" }) 

答案 1 :(得分:2)

虽然@rlarcombe的答案适用于这种特定情况,但是你放弃了所有hansack提供的谓词(eq,cont等),并且基本上是自己编写搜索查询。

Globalize将转换表添加为关联,并且ransack提供了通过在可搜索属性前添加关联表名称来搜索关联表的功能。

根据您的情况,这可以使用,并且仍然允许您使用所有ransack的谓词。

sys.path

只需替换谓词后缀,即可使用其他谓词(如User.with_translations(I18n.locale).ransack(translations_name_eq: 'John') (包含)进行cont匹配:

ILIKE
相关问题