【问题标题】:TypeError: no implicit conversion of Hash into IntegerTypeError:没有将哈希隐式转换为整数
【发布时间】:2020-03-25 17:45:10
【问题描述】:

这是设置我的变量并创建哈希然后我尝试从 json 对象创建用户并硬编码密码,但我返回了一个错误。我得到一个 TypeError:没有将 Hash 隐式转换为 Integer 我不太清楚为什么 jsonfile 不包含密码,我必须为每个用户硬编码一个

require 'json'
encrypted_password = '#$taawktljasktlw4aaglj'
file = File.read('db/people.json')
data_hash = JSON.parse(file)
records = JSON.parse(File.read('db/people.json'))

records.each do |record|
    records['encrypted_password' => encrypted_password]
    user = User.create!(record.except('logins'))
    user.logins.create(record['logins'])
end



【问题讨论】:

  • records['encrypted_password' => encrypted_password] 我不确定它的语法是否正确 :)
  • 我很确定应该是这样的:record['encrypted_password'] = encrypted_password
  • 如果我这样做,我会收到此活动记录错误,ActiveRecord::RecordInvalid: Validation failed: Password can't be blank 我试图为数据库中创建的每个用户设置此密码
  • 你不会通常说record['password'] = 'unencrypted password'然后让User处理生成加密版本吗?另请注意,您希望在迭代中使用record(而不是records)。或者更好User.create!(record.except('logins').merge('password' => 'unencrypted password')).
  • 如果要使用 - 你永远不应该使用默认密码。决定他们是否需要一个并遵循 Rails 方式,或者像其他人一样使用 Devise gem 来处理这方面的问题。如果您是为了好玩而从头开始构建自己的,请查看 Michael Hartl 的 rails 教程以获得比您正在做的更好的选择。

标签: ruby ruby-on-rails-5


【解决方案1】:

不是直接设置encrypted_password,而是设置passwordpassword_confirmation,让Devise做加密的工作。这样,您的用户将获得您设置的默认密码。您的代码现在应该如下所示:

require 'json'
password = 'temporary_password'
file = File.read('db/people.json')
data_hash = JSON.parse(file)
records = JSON.parse(File.read('db/people.json'))

records.each do |record|
    record['password'] = password
    record['password_confirmation'] = password
    user = User.create!(record.except('logins'))
    user.logins.create(record['logins'])
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2016-05-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多