我正在尝试在另一个控制器的新实例中访问Devise的current_user变量。这是我对GetsInterfaceController的定义
$("p").css({'font-size': '40px'});
然后我在ClientsController
中实例化一个新的GetsInterfaceController实例class GetsInterfaceController < ApplicationController
def select_current_signed_in_user
@signed_in_user_here = current_user
end
end
但是当我尝试这个时,我在GetsInterfaceController中的@signed_in_user_here = current_user行上得到null错误。无论如何从GetsInterfaceController里面获取current_user属性?
答案 0 :(得分:0)
current_user
不是变量 - 它是一个辅助方法。因此,它已经可以在所有助手和视图中使用。
此外,从不在Rails中实例化控制器。路由器为您做到了。
控制器中唯一的公共方法应该是响应HTTP请求的操作。
如果要在多个控制器中重用方法,则应使用继承,模块(关注点)或帮助程序。永远不要通过在另一个控制器上调用方法。
要调用您想要创建API客户端类的外部服务:
# adapted from https://github.com/jnunemaker/httparty
require 'httparty'
class StackExchangeClient
include HTTParty
base_uri 'api.stackexchange.com'
def initialize(service, page, user = nil)
@user = user
@options = { query: {site: service, page: page} }
end
def questions
self.class.get("/2.2/questions", @options)
end
def users
self.class.get("/2.2/users", @options)
end
end
或者,如果您需要调用外部服务,例如使用服务对象创建多个模型:
class SomeService
def initialize(user, client: SomeClient)
@user = user
@client = client # for mocking
end
def call
response = @client.get('/foo')
response.each do |d|
@user.baz << d[:woo]
end
end
end
SomeService.new(current_user).call
答案 1 :(得分:0)
我通过将代码移动到lib目录中的Module来解决这个问题。像魅力一样工作