2

Cityというモデルがあります。

さまざまな属性(郵便番号に近い都市、人口別の都市など)に応じて都市を検索する方法がいくつかあります。ただし、都市が見つからない場合は、デフォルトで特定の都市、たとえばニューヨークに設定します。

だから私は自分がこれをたくさんやっていることに気づきました:

@city = City.find_by_zip_code(83030)
if @city.nil?
 @city = City.find_by_name('New York')
end

これは私が郵便番号で見る方法にすぎませんが、私はいくつかの方法でこれを続けています。このデフォルトをどこでどのように一元化する必要がありますか?

City.find_by_name('New York')

編集:

次のような方法を使用することをお勧めします。

def self.default_city
 @default_city = City.find_by_name('New York')
end

デフォルトの都市を取得するたびにデータベースをフェッチしないようにするには?

4

2 に答える 2

1

少なくとも入力を簡単にすることができます。

@city = City.find_by_zip_code(83030) || City.find_by_name('New York')

余分なデータベースヒットを回避するには、デフォルトをキャッシュします。

def self.default_city
  Rails.cache.fetch('default_city') do
    City.find_by_name('New York')
  end
end

そのようなキャッシュに関する詳細がいくつか記載されたブログ投稿があります: http ://www.tmatthew.net/blog/rails-caching-example

于 2012-05-23T17:25:29.243 に答える
0

ActiveRecord::Baseでfind_or_initialize_by_を探します

http://api.rubyonrails.org/classes/ActiveRecord/Base.html

于 2012-05-23T17:19:58.730 に答える