在Rails中的数据库中存储类似excel的数据

时间:2014-01-21 16:49:11

标签: ruby-on-rails ruby database ruby-on-rails-4

我目前正在尝试使用Ruby on Rails 4.0.0和Ruby 2.0.0进行词汇测试。我正在尝试创建一个系统,以便用户可以用两种语言创建一个单词列表,然后比较它们(后者不应该太难,只需要一点点jQuery)。

理想的输出是每个表有两列(col1col1anscol2col2ans)和user_id字段。另一个问题是,我希望用户选择列数,并能够动态添加和删除它们,因此没有固定的数量,但有一个限制,如50.在一个理想的系统,我可以得到一些有点哈希进入数据库并从中读取数据,但我不确定rails会让我这样做(我在开发中使用SQLite,在生产中使用PostgreSQL)。

正如我所提到的,我正在rails中构建它,所以我将无法直接与数据库连接。这样做的最佳方式是什么?

2 个答案:

答案 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

使用此架构,可以轻松添加和删除问题,或为给定用户选择所有问题。