我应该有不同的管理员吗?视图和before_filter的方法?

时间:2014-06-20 00:48:18

标签: ruby-on-rails dry

我正在学习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,我不想养成编写不干的代码的坏习惯。关于如何最好地处理这种情况的任何想法?

1 个答案:

答案 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