Ruby on rails 使用Carmen gem的Rails 4无法在查询中转换国家名称

Ruby on rails 使用Carmen gem的Rails 4无法在查询中转换国家名称,ruby-on-rails,ruby-on-rails-4,carmen,Ruby On Rails,Ruby On Rails 4,Carmen,我使用卡门宝石存储国家作为他们的国家代码像美国,它是美国。但当我在视图中检索国家时,我将其作为其全名检索 我有一个模型用户和帐户 class User < ActiveRecord::Base has_one :account end class Account < ActiveRecord::Base belongs_to :User end class用户

我使用卡门宝石存储国家作为他们的国家代码像美国,它是美国。但当我在视图中检索国家时,我将其作为其全名检索

我有一个模型用户和帐户

class User < ActiveRecord::Base
      has_one :account
    end

 class Account < ActiveRecord::Base
      belongs_to :User
    end 
class用户

@users=User.includes(:admin,:account)。
where.not(管理员:{role:'SUPER'}).where(“类似于名称?或类似于accounts.country?”、“%#{search}%”、“%#{search}%”)
我有一个用户查询,我在视图中使用它来查找他们国家的用户名,但在搜索中,如果我给我们写信,它会给我所有美国国家的名称 但是我不想用他们的国家代码来搜索这个名字,我想写下整个国家的名字

我知道问题在搜索查询中。国家代码存储在数据库中,因此它正在按代码进行搜索,但我无法找到如何在搜索查询中使用carmen国家代码进行名称转换
请帮助,提前感谢

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

country = Carmen::Country.named('bang')
返回
nil
但是

  country = Carmen::Country.named('bang', fuzzy: true) 
返回
。现在,您可以使用
country.alpha\u code
获取国家2号alpha代码,该代码返回
“BD”
类似的alpha 3号代码,使用
country.alpha\u代码
,您可以使用该代码进行查询

N.B:因为这里使用了fuzzy,所以它不会给出总是正确的答案(我认为大多数情况下:),除非搜索键接近实际单词

如果我搜索
Carmen::Country.named('ban',fuzzy:true)
它返回
,尽管我期待

您可以在
lib/carmen/querying.rb
中找到关于
fuzzy
(我的carmen版本是1.0.2)。我想它可能会帮助一些人

Edited虽然这不是最佳答案,但您可以将实际名称保存到另一个名为
country\u name
的列中,该值将在保存后使用
设置。

在使用in回调调用任何活动记录更新方法时要小心,因为调用回调方法可能会导致无限循环。您可以使用不调用回调的
update\u列

我不确定你的问题出在这里。你能重述一下这个问题吗?或者提供一个例子,说明目前正在发生的事情以及你希望发生的事情吗?@sshaw我正在从accounts获得国家简写表格。国家如“US”、“UK”、“IN”和搜索中,我想写下国家全名,如“United States”所以,在where查询中,我想从表格中获得完整的国家名称,但我仍然认为我遗漏了一些东西。为什么这个(无错误处理)不起作用
User.where('accounts.country like?',“%#{Carmen::country.coded(country.name}%”)
不起作用,我想通过输入美国来找到我们,但它给出了,在美国的情况下,嗯是美国的小离岛
  country = Carmen::Country.named('bang', fuzzy: true)