我正在学习Rails并致力于DinnerDash。
在application_controller.rb
我有:
helper_method :admin?
def admin?
current_user.admin_code == 'secret' if current_user
end
因此,我可以在视图文件中使用if admin?
仅向管理员显示某些内容。现在我想编写一个before_filter来检查current_user
是否为管理员,如果不是,则重定向。
在我看来,我必须写另一种方法来做到这一点。对于视图文件,如果用户不是管理员,我希望该方法返回false;对于before_filter
,我希望该方法重定向。
但有些事情告诉我,这不是最有效的方法。由于我学习Rails,我不想养成编写不干的代码的坏习惯。关于如何最好地处理这种情况的任何想法?
答案 0 :(得分:2)
我会使admin?
成为User模型的实例方法。我认为它属于那里,因为你实际上是在询问有关用户对象的信息。
然后,对于before_filter,我会做这样的事情:
before_filter :admin_or_redirect
def admin_or_redirect
redirect_to some_url if !current_user.admin?
end
然后你仍然可以在@user(你在控制器中指定current_user)的视图中调用admin?
,并为你的before_filter提供不同的行为。
修改强>
您还想更改admin?
这样的方法:
class User < ActiveRecord::Base
...
def admin?
self.admin_code == 'secret'
end
end