2

我对 Rails 相当陌生,所以如果它不是我所说的“实例变量”,我深表歉意!

我正在使用 Devise 进行身份验证,因此可以在整个应用程序中使用 current_user 之类的东西。我正在构建的应用程序有一个 User 模型,还有一个 Keyholder 模型(他是该用户的一种版主)和一个 Guest(他对该用户的某些内容具有只读访问权限)。

我想知道的是 - 我可以设置它以便我可以在以密钥持有者身份登录时使用例如 access_user 来访问与 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 

谢谢!

4

2 回答 2

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

于 2013-08-20T09:47:31.210 回答
0

类级别的实例变量也可以帮助你。

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 
于 2013-08-20T11:28:33.967 回答