Rake db:seed 你必须传递一个散列作为参数 - 尝试插入 json
Rake db:seed you must pass a hash as an argument - Trying to insert json
我有这个 json 文件,我想将其放入数据库,就在这里,http://pastebin.com/m3GsTfdi
这是我要存储此信息的 table 的迁移文件;
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: When assigning attributes, you must pass a hash as an argument."
当我运行 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
我也使用了之前在评论中链接的序列化。
感谢帮助!
当您遍历 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
我有这个 json 文件,我想将其放入数据库,就在这里,http://pastebin.com/m3GsTfdi
这是我要存储此信息的 table 的迁移文件;
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: When assigning attributes, you must pass a hash as an argument." 当我运行 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
我也使用了之前在评论中链接的序列化。
感谢帮助!
当您遍历 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