我有问题,
我有一个国家模型。数据库中的条目为:{:name => 'United Kingdom'}
我的数据是UK
而不是United Kingdom
。在我搜索它的其他模型中我做了:
country_name = "United Kingdom" if country.name == "UK"
但我必须在整个应用程序中执行此操作,这很糟糕。
所以问题是:我怎么能在Country
模型中进行只搜索搜索的搜索。当它进行查询时,我不想要{:name => 'UK'}
。
例如。如果我搜索UK
,则结果应为{:name => 'United Kingdom'}
NOT {:name => 'UK'}
。
如果我可以把一些愚蠢的黑客放进去,那么解决方案是可以的:
name = "United Kingdom" if searchstring == "UK"
答案 0 :(得分:1)
您可以为Country
模型添加客户查找器方法:
class Country < ActiveRecord::Base
def self.by_name(name)
name == 'UK'? find_by_name('United Kingdom') : find_by_name(name)
end
end
然后,只要您需要按名称查找国家/地区,就可以使用Country.by_name('...')
。或者,如果您想保留find_by_name
方法的语义:
class Country < ActiveRecord::Base
def self.find_by_name(name)
name = 'United Kingdom' if name == 'UK'
where(:name => name)
end
end
这有各种变化。我想我会赞成第二个例子,因为它提供了与ActiveRecord提供的基于动态属性的查找器相同的API,即find_by_XXX
等。
答案 1 :(得分:0)
我认为你可以用ActiveRecord :: Base.find方法的一些相当讨厌的猴子修补来做到这一点,但我认为这不是一个好主意。
字符串'UK'来自哪里?用户输入?
我会建议这个来源的位置,通过一个将'UK'转换为“United Kingdom”的公共过滤器(也许是一个application_helper方法)。