1

私は国モデルを持っています。DB のエントリは次のとおりです。{:name => 'United Kingdom'}

私が持っているデータはUKの代わりですUnited Kingdom。私がそれを検索した他のモデルでは、次のことを行いました。

country_name = "英国" if country.name == "英国"

しかし、私はアプリケーション全体でこれを行う必要があり、それは悪いことです。

質問:Countryモデルで、検索のみを行う検索をどのように行うことができますか。クエリを作成するときは、したくありません{:name => 'UK'}

例えば。検索するUKと、結果は{:name => 'United Kingdom'}NOTになるはず{:name => 'UK'}です。

次のような愚かなハックを入れることができれば、解決策は問題ありません。

name = "英国" if searchstring == "英国"
4

2 に答える 2

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

このあたりはいろいろなバリエーションがあります。find_by_XXXActiveRecord が提供する動的な属性ベースのファインダーなどと同じ API を提供するため、2 番目の例を好むと思います。

于 2010-08-03T11:10:49.233 に答える
0

ActiveRecord::Base.find メソッドのかなり厄介なモンキー パッチでそれを行うことができると思いますが、それは良い考えではないと思います。

文字列「UK」はどこから来たのですか? ユーザー入力?

そのソースがどこにあっても、「UK」を「United Kingdom」に変換する共通のフィルター (おそらく application_helper メソッド) に通すことをお勧めします。

于 2010-08-03T11:24:20.063 に答える