关于 CSV 文件的导入,stackoverflow 上已经有其他很棒的帖子了。
您当前的模型旨在显示人们最近跑过的 5 个地方。
__________________________________________
| name | place_1 | place_2 | ... | place_5 |
|------|---------|---------|-----|---------|
| John | 1 | 3 | ... | 4 |
| Ann | 2 | 1 | ... | 2 |
| Tim | 3 | 2 | ... | 1 |
| Jack | 4 | 5 | ... | 5 |
| Joy | 5 | 4 | ... | 3 |
------------------------------------------
这种模式的问题在于,当您决定输入有关第六场比赛的数据时,您将不得不从以前的比赛中删除数据,或者您将不得不添加一个新列,这两者都很痛苦。
我对您的建议是您相应地更改您的架构:
______________________________________
| name | place | location | date |
|------|---------|----------|----------|
| John | 1 | New York |11-11-2013|
| Ann | 2 | New York |11-11-2013|
| Tim | 3 | New York |11-11-2013|
| Jack | 4 | New York |11-11-2013|
| Joy | 5 | New York |11-11-2013|
|------|---------|----------|----------|
| John | 3 | Chigaco |24-01-2014|
| Ann | 1 | Chigaco |24-01-2014|
| Tim | 2 | Chigaco |24-01-2014|
| Jack | 5 | Chigaco |24-01-2014|
| Joy | 4 | Chigaco |24-01-2014|
|------|---------|----------|----------|
| John | 4 | London |01-02-2014|
| Ann | 2 | London |01-02-2014|
| Tim | 1 | London |01-02-2014|
| Jack | 5 | London |01-02-2014|
| Joy | 3 | London |01-02-2014|
--------------------------------------
使用这种结构,您可以轻松区分不同的location
种族date
。您不必删除数据,因为您只需将新数据添加到表的末尾......这也可以使用 CSV。
更新
这些数据可以通过一些简单的查询轻松访问和排序:
# get's all of John's races and orders them by the date descending
Race.where(:name => "John").order("date DESC")
______________________________________
| name | place | location | date |
|------|---------|----------|----------|
| John | 4 | London |01-02-2014|
| John | 3 | Chigaco |24-01-2014|
| John | 1 | New York |11-11-2013|
--------------------------------------
例如,如果您只想获得最后 2 个结果,只需添加一个limit
# get the 2 newest races from John
Race.where(:name => "John").order("date DESC").limit(2)
______________________________________
| name | place | location | date |
|------|---------|----------|----------|
| John | 4 | London |01-02-2014|
| John | 3 | Chigaco |24-01-2014|
--------------------------------------
我希望这能给你一个好主意,如果我应该澄清更多的事情,请随时问;)