我是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