如何在加载应用程序后立即调用模型方法。这在我的应用程序中设置了一些业务规则,并且我希望在每次重新启动服务器或对生产进行更改时运行此方法。如何在我的应用程序在Ruby on Rails中加载后立即调用模型方法
什么是做到这一点
如何在加载应用程序后立即调用模型方法。这在我的应用程序中设置了一些业务规则,并且我希望在每次重新启动服务器或对生产进行更改时运行此方法。如何在我的应用程序在Ruby on Rails中加载后立即调用模型方法
什么是做到这一点
的最佳途径,你可以把一个before_filter
到ApplicationController中。
before_filter :load_business_rules
这将每次调用load_business_rules
方法。
我想你会想在你的环境文件中做到这一点,而不是作为before_filter。原因是before_filter会创建性能优先,因为该方法在网站上的每个操作之前都会运行。你可以做的,而不是简单地用一个初始化调用它,或者如果你需要存储的业务规则作为一个静态的对象,你可以在你的环境中声明为一个常量:
Rails::Initializer.run do |config|
...
end
BUSINESS_RULES = load_business_rules
这要看是什么方法确实。如果您只是将一堆常量存储在一个静态对象中,您可以创建一个简单的类并将其放入模型目录中。
例如在一个电子商务网站,我最近建我创建了一个Store模式:
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
我希望有帮助!
使用after_initialize回调。
与过滤器之前/之后不同,它在引导后仅执行一次。这是short tutorial。
谢谢吉姆。想到了,在config.after_initialize中添加以调用方法是否是个好主意? – Sid 2009-12-13 08:14:52
它的工作原理。虽然仍然想知道这是什么“Rails方式”。 – Sid 2009-12-13 09:17:03