1

次のようなマラソンのフィニッシュ場所を含む CSV ファイルがあります。

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

等々...

現在、上記の情報をCSV形式で取得して表として表示できるRailsアプリがあります。

私がやろうとしているのは、ランナーの名前を行として表に表示し、次にランナーがランに参加した最新の 5 つの場所を表示するようにアプリをセットアップすることです。つまり、各マラソンとテーブルの後に新しい CSV ファイルをインポートします。アプリが現在行っている以前のレース結果を上書きするのではなく、場所データを新しい列 (最大 5 つ) に追加します。

どんな助けでも感謝します。

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

このスキーマの問題は、6 番目のレースに関するデータを入力する場合、前のレースのデータを削除するか、新しい列を追加する必要があり、どちらも面倒なことです。

それに応じてスキーマを変更することをお勧めします。

 ______________________________________
| 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 に答える