【问题标题】:Rails 4 using Carmen gem cannot convert country name in query使用 Carmen gem 的 Rails 4 无法在查询中转换国家名称
【发布时间】:2015-08-20 14:00:58
【问题描述】:

我正在使用 carmen gem 将国家/地区存储为他们的国家/地区代码,例如 United States 它是 US 。但是当我在视图中检索国家/地区时,我将其检索为他们的全名

我有一个模型用户和帐户

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 %>

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

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

【问题讨论】:

  • 不确定您的问题是什么。您能否重述这个问题或举例说明现在正在发生的事情以及您希望发生的事情?
  • @sshaw 我正在从 accounts.country 获取 Country 简短表格,例如“US”、“UK”、“IN”,在搜索中我想写下完整的国家名称,例如“United States”所以在查询中我想从表中获取完整的国家/地区名称
  • 我仍然认为我遗漏了一些东西。为什么这(无错误处理)不起作用? User.where('accounts.country like ?', "%#{Carmen::Country.coded(country).name}%")

标签: ruby-on-rails ruby-on-rails-4 carmen


【解决方案1】:

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

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

返回nil 但是

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

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

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

如果我搜索Carmen::Country.named('ban', fuzzy: true),它会返回&lt;#Carmen::Country name="Albania"&gt;,尽管我期待的是&lt;#Carmen::Country name="Bangladesh"&gt;

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

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

【讨论】:

  • 不起作用,我想通过提供美国作为输入来找到美国,但在美国 UM 是美国本土外小岛屿的情况下它给了 UM
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多