2012-05-23 65 views
2

我有一個名爲城市模型。在哪裏放置一個默認值從Model in Rails返回?

我有幾種方法,找一個城市根據不同的屬性(市接近郵編,城市按人口...等)。然而,如果一個城市沒有找到,我想默認給定一個城市,比如說紐約。

所以我發現自己這個做了很多:

@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 

要避免獲取數據庫每次我想獲取默認城市?

回答

1

你至少可以更容易地鍵入了:

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

爲了避免額外的DB命中,緩存默認:

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

+0

是否有您的Rails.cache之間的差異,做@default_city || = City.find_by_name(「紐約」)? –

+0

是的。緩存將按照您的需要持續或縮短(:expires_in選項)。使用實例變量仍然要求您對每個請求運行查詢。 – tybro0103