【问题标题】:Rake db:seed you must pass a hash as an argument - Trying to insert jsonRake db:seed 您必须将哈希作为参数传递 - 尝试插入 json
【发布时间】:2015-01-07 22:40:39
【问题描述】:

我有一个想要放入数据库的 json 文件,在这里,http://pastebin.com/m3GsTfdi

这是我要存储此信息的表的迁移文件;

create_table :characters do |t|
  t.string :name
  t.string :region
  t.string :realm
  t.integer :class
  t.integer :race
  t.integer :level
  t.integer :achievementPoints
  t.string :items
  t.string :stats
  t.string :hunterPets
  t.string :talents
  t.string :progresison

  t.timestamps null: false
end

这就是我尝试通过 seed.rb 插入字符的方式

JSON.parse(open("#{Rails.root}/app/assets/seed/netfive.json").read).each do |chardata|
  Character.create(chardata)
end

但是我得到了错误 “ArgumentError:分配属性时,必须将哈希作为参数传递。” 当我运行 rake db:seed.

我应该如何解决它?我认为这与我试图将数组保存在应该是字符串的位置有关,但我不知道该怎么做。

编辑: 我设法修复它,而不是像这样做种子;

char_data = JSON.parse(File.read("#{Rails.root}/app/assets/seed/netfive.json"))
Character.new({
                     name:char_data['name'],
                     realm:char_data['realm'],
                     charClass:char_data['class'],
                     race:char_data['race'],
                     level:char_data['level'],
                     achievementPoints:char_data['achievementPoints'],
                     items:char_data['items'],
                     stats:char_data['stats'],
                     hunterPets:char_data['hunterPets'],
                     talents:char_data['talents'],
                     progression:char_data['progression'],
                 }).save

我确实也使用了之前在评论中链接的序列化。

感谢您的帮助!

【问题讨论】:

    标签: ruby json ruby-on-rails-4 sqlite rake


    【解决方案1】:

    当您遍历 JSON 时,您将遍历 JSON 中的每个键和值。这不是你想要的。您想从数据中创建一个角色。

    看起来像这样:

    char_data = JSON.parse(File.read("#{Rails.root}/app/assets/seed/netfive.json"))
    Character.create char_data
    

    在执行此操作时,您必须小心数据类型。即,您可能在将 items 保存为字符串时遇到问题。相反,我会考虑序列化该数据。

    这里是序列化的参考:http://apidock.com/rails/ActiveRecord/AttributeMethods/Serialization/ClassMethods/serialize

    【讨论】:

      猜你喜欢
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      相关资源
      最近更新 更多