我想创建一个服务来干燥我的控制器,并使它们更具可读性(并避免使用concerns),但这不是常见的服务,因为它能够获取和设置Cookie和会话条目。我该如何实现?
谢谢!
您可以创建类似以下的服务:
class FooService
delegate *%w(
session
cookies
), to: :controller
class << self
def call(args={})
new(args).call
end
end # Class Methods
#=====================================================================
# Instance Methods
#=====================================================================
def initialize(args)
args.each do |k,v|
class_eval do
attr_accessor k
end
send("#{k}=",v)
end
end
def call
end
end
然后,在您的控制器中,将其命名为:
FooService.call controller: self, other: :args
以这种方式调用时,在controller
实例中将具有other
和FooService
方法,它们分别保存controller
(称为服务的值)和:args
的值。您还将拥有session
和cookies
方法,它们是controller
持有的会话和cookie。然后,您可以根据需要对其进行处理。