设计:注册后未保存自定义字段

时间:2014-02-12 15:52:18

标签: devise ruby-on-rails-4

环境:Rails 4,设计3.2.2
鉴于我在设计模型中添加了两个字段(名称,专业) 当我注册时 然后我在数据库中看到不受影响的新列。

以下是我的控制器和模型类

#custom controller
class UsersController < Devise::RegistrationsController
  before_action :configure_permitted_parameters

  #devise's controller extensions

  protected

  def configure_permitted_parameters
     devise_parameter_sanitizer.for(:sign_up) do |u|
       u.permit(:name, :email, :profession, :password, :password_confirmation)
     end
  end
end

#Devise Model
class User < ActiveRecord::Base
   devise :database_authenticatable, :registerable,
          :recoverable, :rememberable, :trackable, :validatable
   attr_accessor :name, :profession
   validates :name, presence: true
   validates_uniqueness_of  :email, :name
end

我指定devise正确运行并使用我的自定义控制器。
我还检查了params散列,它包含了新的字段值,如您所见:

Processing by UsersController#create as HTML
  Parameters: {"utf8"=>"✓",  "authenticity_token"=>"F3AjMd1/EpYvuhckEMPUkiMZ1szHa6ba7OMbjjSltOk=", "user"=>{"name"=>"test", "email"=>"you@contect.com", "profession"=>"prof", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Save"}

以下是生成的sql:

INSERT INTO "users" ("created_at", "email", "encrypted_password", "updated_at") VALUES  (?, ?, ?, ?)  [["created_at", Tue, 11 Feb 2014 15:14:56 UTC +00:00], ["email", "you@contect.com"], ["encrypted_password", "$2a$10$Bn3LIldBUDPHKO0vrXd7peVz6q/42hOrCOcqdbvBMHVeEtn4EfKma"], ["updated_at", Tue, 11 Feb 2014 15:14:56 UTC +00:00]]

其中不包含任何新字段。

任何提示都会受到欢迎,我已经被困了一个多小时。

1 个答案:

答案 0 :(得分:2)

从模型中删除此行:

attr_accessor :name, :profession

在迁移模型并添加这些字段后,这将覆盖activer记录已提供的访问者。这导致它们不能保存到数据库。