我正在使用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 %>
我有一个用户查询,我在视图中用来查找他们国家的用户名,但在搜索中,如果我写美国,它给了我所有的国家美国的名字 但我不想用他们的国家代码搜索名称,我想写整个国家名称
我知道问题出在搜索查询中。国家代码存储在数据库中,所以它是通过代码搜索,但我无法找到如何使用carmen国家代码在搜索查询中进行名称转换 请提前帮助,谢谢
答案 0 :(得分:0)
您可以通过向fuzzy: true
方法传递默认为false的额外选项Carmen::Country.named()
,使用模糊匹配(实际使用正则表达式)来获取 Carmen Country对象。
country = Carmen::Country.named('bang')
返回nil
,但
country = Carmen::Country.named('bang', fuzzy: true)
返回<#Carmen::Country name="Bangladesh">
。现在,您可以使用country.alpha_2_code
获取国家/地区2字母代码,使用"BD"
返回country.alpha_3_code
类似的alpha 3代码,您可以使用它来查询。
N.B:由于这里使用模糊它不会给出总是正确答案(我认为大多数情况:))除非搜索键接近实际单词。
如果我搜索Carmen::Country.named('ban', fuzzy: true)
它会返回<#Carmen::Country name="Albania">
,但我期待<#Carmen::Country name="Bangladesh">
。
您可以在fuzzy
中找到lib/carmen/querying.rb
(我的卡门版本是1.0.2)。我认为这可能对某人有所帮助。
已修改虽然这不是最佳答案,但您可以将实际名称保存到另一个名为country_name
的列中,该值将使用after_save
rails回调设置。
在回调中调用任何活动记录更新方法要小心,调用回调方法可能会导致无限循环。您可以使用不调用回调的update_column
。