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)
这应该在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)
重要的是要注意我强烈反对这种方法,并使用为此目的而创建的种子方法进行推荐.