小编Pro*_*mer的帖子

尝试导入 CSV 文件会触发一个函数,该函数最终会操作导入到数据库中的数据

就像问题所说,我正在尝试使用以下函数导入 CSV:

def import_users
  path = Rails.root.join('somePath')
  CSV.foreach(path, headers: true) do |row|
    usr = User.new(row.to_hash)
    usr.skip_callbacks = true
    usr.save
  end
  puts "inserts on table users complete"
end
Run Code Online (Sandbox Code Playgroud)

如您所知,这是一个简单的函数。

问题:

所有具有正确数据的列均已正确导入,但User Classpassword= function (setter)触发:

class User < ApplicationRecord

  attr_accessor :skip_callbacks
  validates :password, presence: true, unless: :skip_callbacks

  def password= password
    self[:password] = hash_password password
  end

  private
    
  def hash_password password
     Digest::MD5.hexdigest "#{Digest::MD5.hexdigest password}#{salt}"
  end
end
Run Code Online (Sandbox Code Playgroud)

这会导致数据库中的密码列被新的哈希值作为密码再次重写,从而阻止登录,因为列值已更改。数据库中的密码列不包含与 CSV 文件中相同的信息。

通常我实施了skip_callback绕过password validation但似乎不起作用。

我真的很感激任何形式的帮助,因为我已经尝试解决这个问题几天了,但似乎不明白为什么。

ruby csv ruby-on-rails

5
推荐指数
1
解决办法
93
查看次数

ORA-00936: 执行查询时缺少表达式

我正在使用 Ruby 与数据库通信,并且有一个统计页面显示设备的统计信息。不幸的是,当执行选择查询以显示页面时,我收到以下错误:

错误 -- : StatementInvalid: Java::JavaSql::SQLSyntaxErrorException: ORA-00936: 缺少表达式

SELECT
   COUNT(*) AS count_all,
   date(request_time) AS date_request_time,
   "REQUESTS"."DEVICE_ID" AS requests_device_id 
FROM
   "REQUESTS" 
WHERE
   (
      customer_id = 1 
      AND request_method != 'OPTIONS' 
      AND request_time BETWEEN '2021-10-27 00:00:00' AND '2021-11-03 23:59:59.000999'
   )
   AND 
   (
      device_id IS NOT NULL 
      AND request_time BETWEEN '2021-10-27 00:00:00' AND '2021-11-03 23:59:59.000999'
   )
GROUP BY
   date(request_time),
   "REQUESTS"."DEVICE_ID"
Run Code Online (Sandbox Code Playgroud)

缺少什么表情?我似乎错过了什么。

sql oracle

1
推荐指数
1
解决办法
139
查看次数

标签 统计

csv ×1

oracle ×1

ruby ×1

ruby-on-rails ×1

sql ×1