如何在Ruby on Rails中加载应用程序后立即调用模型方法

时间:2009-12-13 07:32:48

标签: ruby-on-rails initialization

如何在加载应用程序后立即调用模型方法。这会在我的应用程序中设置一些业务规则,并且我希望每次重新启动服务器或对我的生产进行更改时都运行此方法。

最好的方法是什么

3 个答案:

答案 0 :(得分:1)

使用after_initialize回调。

与过滤器之前/之后不同,它仅在引导程序之后执行一次。这是一个short tutorial

答案 1 :(得分:0)

您可以将before_filter放入ApplicationController。

before_filter :load_business_rules

每次都会调用load_business_rules方法。

答案 2 :(得分:0)

我认为您希望在环境文件中而不是before_filter中执行此操作。作为before_filter的原因将在您的网站上的每个操作之前运行该方法时创建性能命中。您可以做的只是使用初始化程序调用它,或者如果您需要将这些业务规则存储为静态对象,您可以在环境中将其声明为常量:

Rails::Initializer.run do |config|
  ...
end

BUSINESS_RULES = load_business_rules

这实际上取决于该方法的作用。如果你只是在静态对象中存储一堆常量,你可以创建一个简单的类并将其放在models目录中。

例如,在我最近建立的电子商务网站上,我创建了一个商店模型:

class Store
  # Constants
  MAX_QUANTITY = 10
  SALES_TAX_RATE = 0.081
  SALES_TAX_STATES = ["AZ","Arizona"]
  SHIPPING_METHODS = {"Standard" => "standard", "2nd Day  (add $18)" => "2nd day"}
  SHIPPING_COSTS = {"standard" => 0, "2nd day" => 18}
  SHIPPING_MINIMUM = 6
  SHIPPING_RATES = [[25,6],[50,8],[70,9],[100,11],[150,13],[200,15],[200,18]]
  ...
end

然后在我的控制器,视图或模型中,我可以通过以下方式轻松引用这些常量:

Store::MAX_QUANTITY

我希望有所帮助!