如何在ROR中添加带有设计的管理员

时间:2015-08-04 22:59:22

标签: ruby-on-rails ruby devise admin

我正在使用设计宝石,我想创建管理员

rails g migration add_admin_to_user

db中的

 def change
    add_column :users, :admin , :boolean , {default: false}
  end

def用户

def admin?
    user=User.create(email: "info@presale.ca",password: "12345678")
    user.admin=true
    user
    user.save
    admin
  end
end
索引页面中的

<% if current_user && current_user.admin? %>
<% end %>
def用户有什么问题,请问如何修复它?

2 个答案:

答案 0 :(得分:1)

因为您的User模型已经有一个boolean:admin属性,所以开箱即用的是默认的admin?方法。如果你调用User.find(1).admin?这样的东西,它将根据你的数据库中的值返回true或false - 所以你可能不想覆盖它。

在用户模型中定义新方法以分配admin属性。

def make_admin!
  self.update_attribute(:admin, true)
end

现在,您可以在控制器或rails控制台中或在有用户实例的任何地方调用User.find(1).make_admin!

然后,您可以将视图中的代码更改为:

<% if user_signed_in? && current_user.admin? %>
  # Show Admin Stuff
<% end %>

答案 1 :(得分:0)

有一些不理想的事情:

  1. 您的属性User.admin是一个布尔值,这意味着如果不在User.rb(模型)中添加方法,您将能够执行User.admin?并返回true或false。

  2. 在您的方法中创建管理员用户,检查当前用户是否为管理员,这不是一个好主意。最快捷的方法是进入rails控制台(通过终端)并将用户更新为admin = true,例如User.last.update_attribute(:admin, true)