2014-01-21 87 views
1

我目前正在尝试在Ruby on Rails 4.0.0和Ruby 2.0.0中做一个词汇测试网站。我试图创建一个系统,以便用户可以用两种语言创建一个单词列表,然后比较它们(后者不应该太难,只是一点点jQuery)。在Rails数据库中存储excel-like数据

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

正如我所提到的,我正在使用rails构建,所以我无法直接与数据库进行交互。做这个的最好方式是什么?

+0

我想提供一些帮助,但我不明白你想做什么。你能举一个例子,我可以看到你想达到什么目的? – Nobita

回答

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柱就像从here使用的任何其他

class AddSettingsToUser < ActiveRecord::Migration 
    def up 
    add_column :users, :questions, :hstore 
    end 

    def down 
    remove_column :users, :questions 
    end 
end 

代码示例。你应该检查整个帖子。

+0

谢谢!很有帮助。 – HexCoder

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 

有了这个架构将很容易的添加和删除问题,或选择特定用户的所有问题。

+0

我明白你的意思了。如果我要使用此方法,我将如何以用户创建它们的方式排列行? – HexCoder

+0

默认情况下,Rails为每个表添加'created_at'列。 [本指南](http://guides.rubyonrails.org/active_record_querying.html#ordering)可以帮助您通过'created_at'命令检索到的行。 –

+0

是的,但确实只有当数据发送时(即,当您单击提交按钮时)才创建行,并且所有行在时间戳时都会完全相同? – HexCoder