1

我有一个 CSV 文件,其中包含马拉松比赛的完赛名次,如下所示:

name,place
Sarah,1
Kane,5
John,7

等等...

我目前有一个 Rails 应用程序,可以将上述信息以 CSV 格式显示并显示为表格。

我要做的是设置应用程序,以便它显示一个表格,其中跑步者的名字作为行,然后是他们在跑步中出现的五个最近的地方,即我会在每次马拉松和表格之后导入一个新的 CSV 文件会将位置数据添加到一个新列中(最多五个),而不是覆盖我的应用程序当前所做的以前的比赛结果。

任何帮助表示赞赏。

4

1 回答 1

1

关于 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|
 --------------------------------------

我希望这能给你一个好主意,如果我应该澄清更多的事情,请随时问;)

于 2013-10-05T08:09:33.217 回答