【问题标题】:Where to place a default value to return from a Model in Rails?在哪里放置默认值以从 Rails 中的模型返回?
【发布时间】:2012-05-23 17:14:56
【问题描述】:

我有一个名为 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

为了避免每次我想获取默认城市时都获取数据库?

【问题讨论】:

    标签: ruby-on-rails-3 models


    【解决方案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

    【讨论】:

    • 你的 Rails.cache 和做 @default_city ||= City.find_by_name('New York') 有什么区别吗?
    • 是的。缓存的持续时间与您希望的一样长或短(:expires_in 选项)。使用实例变量仍然需要对每个请求运行查询。
    【解决方案2】:

    在 ActiveRecord::Base 中查找 find_or_initialize_by_

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

    【讨论】:

    • 这种方法真的不是他要的。
    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 2021-04-18
    相关资源
    最近更新 更多