Ruby on rails 试图得到;“当前用户”;在轨
在Ruby on rails 试图得到;“当前用户”;在轨,ruby-on-rails,Ruby On Rails,在/views/layouts目录中,如何获取当前用户?我正在使用Desive,但由于某种原因,当前用户在这里不起作用,它将其描述为未知方法。我想做一些类似的事情: <% if User.role? == "gen_admin" %> <li> <%= link_to('Admin', users ) %> </li> <% end %> 您已将角色?方法定义为实例方法。这意味着为了使用它,您应该首先从User
/views/layouts
目录中,如何获取当前用户?我正在使用Desive,但由于某种原因,当前用户在这里不起作用,它将其描述为未知方法。我想做一些类似的事情:
<% if User.role? == "gen_admin" %>
<li>
<%= link_to('Admin', users ) %>
</li>
<% end %>
您已将
角色?
方法定义为实例方法。这意味着为了使用它,您应该首先从User
类创建实例,例如:
@user=User.new
现在您可以调用@user.role?
如果您想通过模型用户获得角色?
,则应将其定义为类方法,在对象中传递以进行验证
def self.role?(user)
...
end
您是否忘记在\u过滤器:验证\u用户之前添加代码>在您的控制器中?这将确保当前用户在视图中可用您需要更改视图中的代码以使用当前用户
,而不是用户
,并正确调用角色?
方法(无=
)。如果在非登录用户可以访问的视图中使用此选项,您需要确认该用户已首先登录(因此您不会尝试在nil
上调用role?
,这将引发异常):
您的代码必须说明用户何时登录以及何时未登录
如果没有用户登录,则当前用户
将返回nil(与您的情况相同,您认为这是Desive的一个错误)
您的视图代码必须处理此问题-例如
<% if current_user.present? && current_user.role?('gen_admin') %>
您能提供方法角色的代码吗?
好的,我添加了用户方法尝试放置self
,这样它就变成了def self.role?(基本角色)ROLES.index(基本角色)to_s)当您尝试使用当前用户时,您会遇到什么错误?一旦你可以使用它,而不是
,你将希望使用似乎没有改变它的
@Newbie。不,它强制用户必须登录才能访问当前操作。我的答案可能不清楚,但我认为它在某种程度上是正确的,因为如果你不使用:authenticate\u user
在您的控制器中,从该控制器访问视图中的当前用户将是错误的,对吗?没有:验证用户身份,我们还能使用当前用户吗代码>?是的,您可以使用当前用户
。不强制登录并不意味着用户无法登录。不,您不需要调用authenticate\u user
来设置当前用户。很酷,我自己没有使用designe,所以我不确定。删除了我答案的那部分。剩下的答案是正确的,尽管我猜你使用的.present?
稍微更彻底一些(当前用户是否有可能返回一个空的对象?)。这个网站上的人有时候很奇怪。你的回答并不是我所需要的,但它肯定能帮助其他人。谢谢你对胡迪尼的支持!也许我误解了你的问题。如果你解决了你的问题,那么我为你感到高兴,如果没有,你能再进一步吗?好的,这让我通过了零:物体投诉。谢谢你的信息,我不知道你必须解释没有用户被明确登录。但现在它说:参数的数目错误(2对1)
,指的是角色?我相信这种方法。对这个有什么想法吗?没关系,我必须把“自我”从角色中去掉?出于某种原因,我选择了这个方法。谢谢你的帮助!
<% if current_user && current_user.role?("gen_admin") %>
<li>
<%= link_to('Admin', users ) %>
</li>
<% end %>
<% if current_user.present? && current_user.role?('gen_admin') %>