【问题标题】:Update table of running results in rails app在 rails 应用程序中更新运行结果表
【发布时间】:2013-10-05 16:37:08
【问题描述】:

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

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

等等……

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

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

任何帮助表示赞赏。

【问题讨论】:

  • 添加列 marathon-locationdate 不是很有用吗,通过这些额外的列,您可以轻松地在表的末尾添加数据并将其与以前的数据不同...
  • 感谢您回复@TheChamp,但我不明白这如何解决问题。你能详细说明一下吗?

标签: ruby-on-rails ruby csv


【解决方案1】:

关于CSV文件的导入,stackoverflow上已经有other great posts了。

您当前的模型旨在显示人们最近跑过的 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|
 --------------------------------------

通过这种结构,您可以通过locationdate 轻松区分不同的种族。您不必删除数据,因为您只需将新数据添加到表的末尾...这也可以使用 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|
 --------------------------------------

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

【讨论】:

  • 哦,我明白了。但是如果我们在悉尼和巴塞罗那有更多的比赛,那么我们会不会遇到同样的问题,那么我们已经达到了过去五场比赛的最大允许成绩(从上面给出纽约、芝加哥和伦敦)。然后在巴黎举行另一场比赛,纽约的结果将如何消失,为新的巴黎结果腾出空间?
  • 据我了解,您的目标是获取最近 5 场比赛的数据,而这只是 SQL queries 的问题,例如,我可以使用 Race.where(:name => "John").order("date DESC").limit(2) 获得约翰的最后 2 个位置这可能会变得更复杂,但您想要的结果将很容易获得。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
相关资源
最近更新 更多