我在我的应用程序的许多部分使用这种检查
if user_signed_in? && current_user.role.label == "admin"
# do something
end
我决定在User
模型(设计)中创建一个包含此检查的方法
# app/models/user.rb
def is_admin?
user_signed_in? && self.role.label == "admin"
end
def is_editor?
user_signed_in? && self.role.label == "editor"
end
# etc etc
所以我可以使用它,只是为了更多的可用性。
if current_user.is_admin?
# do something
end
但是我收到未定义的user_signed_in错误?方法。我该如何解决这个问题?
答案 0 :(得分:2)
user_signed_in?
将是一个由设计添加的控制器方法我想象
我要么将其添加到帮助器中,要么将其作为应用程序控制器中的方法
class ApplicationController
def is_admin?
user_signed_in? && current_user.role.label == "admin"
end
helper_method :is_admin?
def is_editor?
user_signed_in? && current_user.role.label == "editor"
end
helper_method :is_editor?
end
helper_method
将使视图可供访问
答案 1 :(得分:2)
signed_in
不是模型中可用的方法,仅在控制器内。 current_user
class ApplicationController
helper_method :admin?
def admin?
current_user && current_user.role.label == "admin"
end
end
您最好在ApplicationController中创建一个方法。使它成为一个帮助方法,这样你也可以在视图中使用它......
<% if admin? %>
<%= "this is an admin" %>
<% end %>
然后您可以使用它,而不需要将其附加到用户对象。
>>> import datetime
>>> datetime.datetime.strptime('2015-02-03T05:04:01+0000', '%Y-%m-%dT%H:%M:%S+0000')
datetime.datetime(2015, 2, 3, 5, 4, 1)
答案 2 :(得分:1)
试试这个,如果想在用户模型中定义此方法,请执行此操作
用户模型中的 def is_admin?
self.role.label == "admin"
end
并在你看来的任何地方使用它
<% if current_user && current_user.admin? %>
<% end %>
答案 3 :(得分:0)
更好的方法是使用rolify gem。 rolify允许您为用户创建角色,只需检查user.has_role