我需要使用MySQL
框架将角色统计信息存储到Ruby on the Rails
数据库。似乎我不能在我的数据库中使用数组而不转换到PostgreSQL
,这是我目前无法做到的。所以,我认为动态变量名称是关键,但我不确定如何创建它们。目前我的代码看起来像这样:
class CreateInventories < ActiveRecord::Migration
def change
create_table :inventories do |t|
t.string :user_name
t.string :char_name
t.string :char_item1
t.string :char_item2
t.string :char_item3
t.string :char_item4
t.string :char_item5
t.string :char_item6
t.string :char_item7
t.string :char_item8
t.string :char_item9
t.string :char_item10
t.string :char_item11
t.string :char_item12
t.string :char_item13
t.string :char_item14
t.string :char_item15
t.string :char_item16
t.string :char_item17
t.string :char_item18
t.string :char_item19
t.string :char_item20
t.timestamps null: false
end
end
end
显然这太可怕了。任何人都可以告诉我一种排序方式,以便它不会使用20行代码来创建真正应该只是一个变量吗?
答案 0 :(得分:3)
这是未经测试的,但却是动态生成字符串或符号的基础:
create_table :inventories do |t|
t.string :user_name
t.string :char_name
20.times do |i|
t.string "char_item#{ 1 + i }".to_sym
end
t.timestamps null: false
end
答案 1 :(得分:1)
我建议您规范化数据模型。虽然您的结构适用于清单中的前20个项目,但如果要添加另一个清单槽,则不希望进行数据库迁移。
如果将项目数据存储在单独的表中,则可以使用InventoryItems表作为连接表。
class CreateInventories < ActiveRecord::Migration
def change
create_table :inventory_items do |t|
t.references :user
t.string :inventory_slot
t.references :item
end
end
end
这样,您可以使角色的库存任意大,而无需进行任何数据库迁移。