【发布时间】:2015-01-17 03:50:58
【问题描述】:
我编辑了 devise 的 RegistrationsController::create 方法以稍微修改行为。我要做的是,如果数据库中没有管理员用户,那么首先注册的用户将被分配管理员角色,否则它将是普通用户。
但是,尽管角色已正确分配给对象(经过测试),但它并没有被持久化到数据库中。
型号:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessor :role
Roles = [ :admin, :default ]
def is? requested_role
self.role == requested_role.to_s
end
def self.admin_role
return Roles[0]
end
def self.default_role
return Roles[1]
end
end
修改设计方法:
def create
build_resource(sign_up_params)
admin_user = User.find_by_role(User.admin_role)
if admin_user.nil?
resource.role = User.admin_role
else
resource.role = User.default_role
end
# here puts resource.role shows what's expected is indeed being assigned to the object
if resource.save
...
end
end
为什么role 没有存储在数据库中?为什么是NULL?
【问题讨论】:
-
尝试
resource.save!(bang版)保存时是否有效。我敢打赌,事实并非如此。
标签: ruby-on-rails ruby-on-rails-4 devise