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 回答