2

我正在使用 carmen gem 将国家/地区存储为他们的国家/地区代码,就像美国一样,它是美国。但是当我在视图中检索国家时,我将其检索为他们的全名

我有一个模型用户和帐户

class User < ActiveRecord::Base
      has_one :account
    end

 class Account < ActiveRecord::Base
      belongs_to :User
    end 

 @users = User.includes(:admin, :account).
       where.not(admin: { role: 'SUPER' }).where("names like ? OR accounts.country like ?" , "%#{ search }%", "%#{ search }%")

<% @users.each do |user| %>
  <%= user.names %>
  <%= Carmen::Country.coded(user.account.country).name %>
<% end %>

我有一个用户查询,我在视图中使用它来查找带有他们国家/地区的用户名,但是在搜索中,如果我写美国,它会给我所有带有美国国家/地区的名称,但我不想用他们的国家/地区搜索名称代码,我要写整个国家的名字

我知道问题出在搜索查询中。国家代码存储在数据库中,所以它是通过代码搜索,但我无法在搜索查询中找到如何使用卡门国家代码到他们的名字转换请帮助,提前谢谢

4

1 回答 1

0

您可以通过将默认为 false 的额外选项传递给方法来使用模糊匹配(实际上使用正则表达式)获取Carmen Country 对象fuzzy: trueCarmen::Country.named()

country = Carmen::Country.named('bang')

返回nil

  country = Carmen::Country.named('bang', fuzzy: true) 

返回<#Carmen::Country name="Bangladesh">。现在,您可以使用country.alpha_2_code返回"BD"类似的 alpha 3 代码来获取国家/地区 2 alpha 代码country.alpha_3_code,您可以使用它来查询。

注意:由于这里使用模糊它不会总是给出正确的答案(我认为大多数情况下:))除非搜索键接近实际单词。

如果我搜索它,虽然我期待Carmen::Country.named('ban', fuzzy: true)它返回。<#Carmen::Country name="Albania"><#Carmen::Country name="Bangladesh">

你可以找到关于fuzzylib/carmen/querying.rb我的卡门版本是 1.0.2)。我认为这可能对某人有所帮助。

已编辑虽然这不是最佳答案,但您可以将实际名称保存到另一个名为的列,例如使用rails 回调country_name设置哪个值。after_save使用回调调用任何活动记录更新方法时要小心,调用回调方法可能会导致无限循环。您可以使用update_column不调用回调。

于 2015-10-14T07:51:52.000 回答