Rails 4:让第一个用户成为管理员?

Abs*_*dim 2 ruby-on-rails ruby-on-rails-4

我正在使用FB和G +进行身份验证.如何让第一个注册管理员的用户?我看像几个答案一个,但我得到的错误(如"为无未定义的方法`update_attribute":NilClass"上一个链接的答案),他们大多是老人和色器件宝石.

users_controller

  def update 
    @user = User.find(params[:id])

    if @user.update(user_params)
        redirect_to @user
      else
        render 'edit'
      end
  end

private

def user_params
  params.require(:user).permit(:admin, :banned)
end
Run Code Online (Sandbox Code Playgroud)

Bra*_*uck 6

这应该在db/seeds.rb您可以执行的文件中完成rake db:seed.与Facebook和G +的联系必须在事后完成.我不会依赖任何自动将第一个用户升级为管理员状态的解决方案.这应该只是明确地做了.

示例seeds.rb:

# This example is using Devise, however it can easily be adapted to whatever
# setup you require as there is nothing "devise" specific here.
user = User.find_or_create_by(email: "Admin Email")
user.password = "Admin Password"
user.admin = true
user.save
Run Code Online (Sandbox Code Playgroud)

我使用的另一个工具是正常注册用户,然后通过类似的工具手动将它们提升为管理员状态rails console.

编辑

如果您仍然希望继续使用您的方法(我认为不安全),那么您可以使用这样的ActiveRecord钩子:

class User < ActiveRecord::Base
  # relations and stuff
  before_save :check_to_make_admin

  private

  def check_to_make_admin
    # Only the first user should be made admin
    if User.count == 0
      self.admin = true
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

重要的是要注意我强烈反对这种方法,并使用为此目的而创建的种子方法进行推荐.