Rails和devise:模型属性没有被持久化

时间:2014-11-19 15:02:07

标签: ruby-on-rails ruby-on-rails-4 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

1 个答案:

答案 0 :(得分:1)

如果您在桌面上将此列定为列,则不需要attr_accessor :role。只需在相关表格中定义相关列,ActiveRecord即可为您提供数据库备份accessors

您的attr_accessor将覆盖这些内容,并阻止他们将更改保留在数据库中。