我是ruby/rails世界的新手,我面对的问题看起来很琐碎,但对我来说并不那么容易。如何使用元编程为ruby中的类的所有实例创建实例变量?
我想要做的是写一个简单的辅助方法,以帮助保持控制器清洁。此方法将接收符号/字符串,并使用camelized接收的字符串创建一个实例变量,该字符串将评估为常量/类。
我试图恢复自己的:
class ApplicationController < ActionController::Base
...
protected
def self.service(name)
instance_eval do
instance_variable_set("@#{name.to_s.pluralize}", name.to_s.camelize.constantize)
end
end
而且,在我的控制器:
class UserController < ApplicationController
service :user
但是当我这样做,它在UserController
,不UserController.new
创建实例变量。所以,我知道什么是错的,但我无法找到我该怎么做的权利。
任何人都可以帮助我吗?
您是否尝试过不使用'self.'来定义此方法,并用'service:user'替代'before_action:service'来调用它? – 2014-08-27 13:54:44
我想我可以做到这一点,但这种“服务”方法不会创建一个服务。我希望每个控制器都能指定它需要的服务。我可以用'before_action'做到吗? – 2014-08-27 13:57:00
正如我想的那样,你不需要所有控制器来处理一个请求,所以像这样: 'before_action - > {| c | c.service(:user)}'并且设置里面的实例变量就够了。什么是类变量? (例如@@ my_var) – 2014-08-27 14:05:30