【问题标题】:I get an error when importing data into User model将数据导入用户模型时出现错误
【发布时间】:2017-11-01 13:30:29
【问题描述】:

我正在使用 devise gem 进行用户会话操作。我想将数据导入管理面板中的用户模型。

Ruby 版本:2.4.1p111

Rails 版本:Rails 5.1.4

管理面板 gem:activeadmin

管理面板导入 gem:active_admin_import

admin/user.rb

ActiveAdmin.register User do active_admin_import validate: true, template_object: ActiveAdminImport::Model.new( hint: "Dosyanızda veriler belirtilen başlıklar altında olmalıdır: 'email', 'identity_no', 'password', 'password_confirmation'", csv_headers: ['email', 'identity_no', 'password', 'password_confirmation'] ) permit_params :email, :identity_no, :password, :password_confirmation .... ... end

models/user.rb

class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable has_one :profile, dependent: :destroy has_many :graduations, dependent: :destroy has_many :works, dependent: :destroy validates :identity_no, presence: true ... ... end

我收到错误消息: can't write unknown attribute password

我该如何解决这个错误?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5 activeadmin active-admin-import


    【解决方案1】:

    原因

    Devise 创建encrypted_password 数据库字段,而不是password 字段,它会覆盖password= 方法来进行加密,然后将加密的一个分配给encrypted_password

    active_admin_import是直接导入的,所以没有经过password=方法,所以报错

    解决方案

    使用before_batch_import模拟加密过程并将加密密码分配给encrypted_password字段。不需要password_confirmation。示例:

    active_admin_import validate: false,
      before_batch_import: proc { |import|
        import.csv_lines.length.times do |i|
          import.csv_lines[i][2] = User.new(password: import.csv_lines[i][2]).encrypted_password
        end
      },
      template_object: ActiveAdminImport::Model.new(
        csv_headers: ['email', 'identity_no', 'encrypted_password']
      ),
      timestamps: true
    

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 2021-10-20
      • 1970-01-01
      • 2017-08-27
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      相关资源
      最近更新 更多