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