Rails - 从应用程序的任何位置调用实例变量

时间:2013-08-20 09:15:18

标签: ruby-on-rails ruby instance-variables

我对Rails相当新,如果它不是我所说的“实例变量”,请道歉!

我正在使用Devise进行身份验证,因此可以在整个应用程序中使用current_user之类的东西。我正在构建的应用程序有一个User模型,还有一个Keyholder模型(对于该用户来说是一种主持人),以及一个Guest(对该用户具有只读权限的一些东西)。

我想知道的是 - 我可以设置它以便我可以使用例如access_user以keyholder身份登录以访问与current_user相同的对象 - 如果是,我在哪里将代码放入我的应用程序?它很快变得非常冗长,而且不像Rails那样不得不重复自己。

我想要实现的是能够使用'access_user'而不是current_user,这样无论是用户,密钥持有者还是访客登录,都会使用用户对象。

例如:

def access_user
  if user_signed_in?
    access_user = current_user
  end
  if keyholder_signed_in?
    access_user = current_keyholder.user
  end
  if guest_signed_in?
    access_user = current_guest.user
  end
end 

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以在ApplicationController中设置此方法,并将其公开给辅助方法。

class ApplicationController
  helper_method :access_user

  def access_user
    #blah blah
  end
end

当ApplicationController中的方法时,它可供所有控制器使用。

当您使用helper_method时,它将作为辅助方法公开,以便在View中使用。有关helper_methodhttp://apidock.com/rails/ActionController/Helpers/ClassMethods/helper_method

的更多信息

答案 1 :(得分:0)

Class level instance variables也可以帮到你。

def access_user
  if user_signed_in?
    @access_user = current_user
  end
  if keyholder_signed_in?
    @access_user = current_keyholder.user
  end
  if guest_signed_in?
    @access_user = current_guest.user
  end
end