Ruby on rails 在从模型创建时设计更新_属性

Ruby on rails 在从模型创建时设计更新_属性,ruby-on-rails,devise,Ruby On Rails,Devise,我有一个应用程序,其用例是:有人可以注册一个帐户作为管理员。该管理员可以邀请其他用户 我有一个User模型,其中的admin列默认为false。我使用design\u invitablegem来处理邀请。当有人注册时,admin列应该为true。当管理员邀请用户时,gem会创建一个admin=>false的用户,因此该用户是普通用户,没有邀请其他用户的权限 我通过覆盖Desive的控制器做到了这一点,如下所示: #registrations_controller.rb def create s

我有一个应用程序,其用例是:有人可以注册一个帐户作为管理员。该管理员可以邀请其他用户


我有一个
User
模型,其中的
admin
列默认为false。我使用
design\u invitable
gem来处理邀请。当有人注册时,admin列应该为true。当管理员邀请用户时,gem会创建一个admin=>false的用户,因此该用户是普通用户,没有邀请其他用户的权限

我通过覆盖Desive的控制器做到了这一点,如下所示:

#registrations_controller.rb
def create
 super
 current_user.update_attribute :admin, true
end

现在,我想将此行为传递给模型(胖模型、瘦控制器),但我不能在模型中使用
当前用户
,因为只有视图、助手和控制器才能访问它。

您可以向模型中添加一个方法,使该用户成为管理员:

class User < ApplicationRecord
  # model
  ...
  def make_admin!
    update(admin: true)
  end
end

class RegistrationsController < ApplicationController
  def create
    ...
    current_user.make_admin!
  end
end
class用户

请注意,如果
当前用户
为零,这将引发错误

模型无权查看帮助器方法,如
current\u user
。就我所知,
用户
上的
创建
后回调不会起作用,因为
用户
不知道也不关心它是通过注册还是邀请创建的。您可以定义一个新的
用户。创建\u as\u admin
方法

class User < ApplicationRecord
  def self.create_as_admin(params = {})
    params.merge(admin: true)
    create(params)
  end
end
在您的注册控制器中

class Users::RegistrationsController < Devise::RegistrationsController
  include AdminCreatable
end 
类用户::注册控制器<设计::注册控制器
包括可管理的
结束

当有人使用可注册模块时,
是什么意思?
当有人注册时,将创建
用户。为什么不直接将
admin
设置为默认值
true
?因为我使用的是
designe\u invitable
gem,它允许一个admin=>true的用户邀请其他用户,gem创建了一个admin默认值为false的用户,因此被邀请的用户是一个更有意义的标准用户,这些是你应该补充到问题中的细节
class Users::RegistrationsController < Devise::RegistrationsController
  include AdminCreatable
end