我目前正在尝试使用Ruby on Rails 4.0.0和Ruby 2.0.0进行词汇测试。我正在尝试创建一个系统,以便用户可以用两种语言创建一个单词列表,然后比较它们(后者不应该太难,只需要一点点jQuery)。
理想的输出是每个表有两列(col1
,col1ans
,col2
,col2ans
)和user_id
字段。另一个问题是,我希望用户选择列数,并能够动态添加和删除它们,因此没有固定的数量,但有一个限制,如50.在一个理想的系统,我可以得到一些有点哈希进入数据库并从中读取数据,但我不确定rails会让我这样做(我在开发中使用SQLite,在生产中使用PostgreSQL)。
正如我所提到的,我正在rails中构建它,所以我将无法直接与数据库连接。这样做的最佳方式是什么?
答案 0 :(得分:1)
您实际上可以使用hstore将其保存为postgres中的哈希值。由于您使用的是Rails 4,因此hstore已经是本机数据类型。
运行迁移告诉postgres使用hstore:
class AddHstore < ActiveRecord::Migration
def up
execute 'CREATE EXTENSION hstore'
end
def down
execute 'DROP EXTENSION hstore'
end
end
像其他任何
一样添加hstore列class AddSettingsToUser < ActiveRecord::Migration
def up
add_column :users, :questions, :hstore
end
def down
remove_column :users, :questions
end
end
here使用的代码示例。你应该查看整篇文章。
答案 1 :(得分:1)
如果我正确理解您的问题,我建议您提出每个问题并回答一行,而不是一对列。动态添加和删除行是一种常见的普通数据库操作。实时添加和删除列不是。此外,表中的所有行通常必须具有相同的列;一行不能有比另一行更多或更少的列。
因此,请考虑更像这样的架构:
id | user_id | question | answer
==============================================
1 | 1 | Why is the sky blue? | Magic
2 | 1 | Why is grass green? | Elves
3 | 2 | Are rocks edible? | No
4 | 2 | How long is a day? | 24 hours
使用此架构,可以轻松添加和删除问题,或为给定用户选择所有问题。