具有嵌套属性的活动记录导入

时间:2019-09-28 10:01:52

标签: ruby-on-rails

我正在尝试使用activerecord-import gem导入与用户相关的大量记录。这里角色具有和与用户的许多关系。导入用户数据时,导入成功。但是不会导入role_id。.

我已经尝试通过获取有效的数据邮件ID并从该有效的邮件ID中查找用户并更新角色ID。成功了。我需要了解其他一些使用主动记录导入的方法。

用户参数:-

  def user_params
    params.require(:user).permit(:email, :first_name, :last_name, role_ids: [])
  end

导入方法:-

  def import(import)
    valid_rows = []
    all_roles = {}
    file = Paperclip.io_adapters.for(self.file).read
    Role.all.select(:id, :name).map { |role| all_roles[role.name.gsub(/[^A-Za-z]/, '').downcase] = role.id }

    CSV.parse(file, headers: true, skip_blanks: true, header_converters: ->(header) { header.strip }, converters: ->(data) { data ? data.strip : nil }).each do |row|
      user_role_name = (row['roles'].gsub(/[^A-Za-z]/, '').downcase || [])
      role_ids = [all_roles[user_role_name]] || []
      attributes = { first_name: row['first_name'], last_name: row['last_name'], email: row['email'], role_ids: role_ids}
      row = User.new(attributes)
      if User.new(attributes).valid?
        valid_rows << row
    end

    User.import valid_rows

  end

有人可以解释在导入时如何使用用户数据导入角色ID!

0 个答案:

没有答案