Ruby on rails 在ROR项目中通过思考狮身人面像搜索法语

Ruby on rails 在ROR项目中通过思考狮身人面像搜索法语,ruby-on-rails,localization,thinking-sphinx,Ruby On Rails,Localization,Thinking Sphinx,如何使用sphinx搜索db中的条目实际上是英语的法语单词 情况是: 我有一个ROR项目,数据库中有一个名为categories的表,类别名称是英文的,类别有许多问题条目 在本地化文件config/locals/fr.yml中,这些类别被翻译成法语 考虑到可扩展性,我们不能将db中的类别名称更改为法语 用户可以通过键入部分关键字进行搜索 以下是一个例子: 类别名称:健康与医疗 法语:Santéet médecine 那么我该如何做到这一点: 在搜索字段中键入Santémédecine abc,s

如何使用sphinx搜索db中的条目实际上是英语的法语单词

情况是:

我有一个ROR项目,数据库中有一个名为categories的表,类别名称是英文的,类别有许多问题条目

在本地化文件config/locals/fr.yml中,这些类别被翻译成法语

考虑到可扩展性,我们不能将db中的类别名称更改为法语

用户可以通过键入部分关键字进行搜索

以下是一个例子: 类别名称:健康与医疗 法语:Santéet médecine

那么我该如何做到这一点:
在搜索字段中键入Santémédecine abc,sphinx将返回健康和医疗类别下的问题,并使用关键字abc?

首先,我认为您不应该使用yml文件翻译db数据。您可以使用yml转换db列名或模型名等,但不能转换存储在db中的数据。这是个糟糕的设计。最好是在db中存储不同的翻译,但您想知道如何在不将其存储在db中的情况下进行此类搜索,因此:

你可以用很多不同的方法来做。如果你像这里这样生成标签链接,那就很容易了。您应该生成如下链接:

# controller
@tags = Tag.all

# view 
<% @tags.each do |tag| %>
  <%= link_to I18n.t tag.name, search_tag_path(tag) %>
<% end %>
或者根据你的型号和路线做类似的事情

如果您想使用一些复选框或选择字段来选择标记,则应类似于上面的示例:

# controller
@tags = Tag.all

# view
<% form_tag search_path do |f| %>
  <% @tags.each do |tag| %>
    <%= I18n.t tag.name %> <%= check_box_tag "tags[#{tag.id}]" %>
  <% end %>
<% end %>

在这里提交时,您将获得所选标签的id数组:params[tags]。

感谢您的回答,有很多类别,因此为用户创建一个类别列表以选择获取类别id是不合理的。客户希望在搜索框中键入类别名称的一部分,以查找该类别下的所有问题,搜索引擎为Sphinx。您的意思是输入可以是其他语言类别的一部分,那么它应该从匹配的类别中获取所有问题吗?如果是,那么您应该首先,匹配yml文件中的所有类别名称并从中获取类别ID。然后从数据库中获取所有内容。这里不需要斯芬克斯。据我所知,关于狮身人面像,我只知道一点,它直接向db发出声音。所以它可能只能找到以db为单位的数据。所以如果你在yml中有一些东西,斯芬克斯不会使用它。所以再一次:你应该把你的翻译放在db里。好的,我会把翻译放在db里,非常感谢