質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

1回答

1831閲覧

rails ifとeach do(複数の配列)の組み合わせ

hurousyotoku500

総合スコア27

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/11/20 10:14

編集2022/01/12 10:55

現在、railsにてゴルフスコアアプリ制作中ですが、リーダーボードに各プレーヤーが何番Hまでプレーしたか表示させる機能をつくっております。
ネックとしては、1Hスタートと10Hスタートのプレーヤーがいるので、1〜9Hと10〜18Hの2つにわけ、それぞれのMAX値をだして、MAX値から、下記のif文にて算出しようとしています。(下記、コントローラにてスコアが未入力のホールはwhereで省いております。)
ですが、現状何も表示されず、エラーも特にでなく、どこが間違っているのかわからず、困っております。
データベースは下の画像のような感じです。アドバイス等、宜しくお願い致します。

【追記】
表示されない原因がわかってきました。

@thru_1h_start = Score.where("created_at >= ?", Date.today).where(course: params[:course]).where(hole_number: 1..9).where.not(hole_score: nil).group(:round_id).maximum(:hole_number)

の中の.where.not(hole_score: nil)でそもそも弾いてしまっていたので、
VIEW側に書いてある、elsif a == nilに当てはまらなかったのかもしれません。
(ここのnillはあくまで、hole_scoreがnillということかと考えています。IN,OUT両方何かしらのhole_scoreが入力されていれば、正常に表示されました。)
なので、a[1]の配列の中身が空っぽかどうか判別できれば、うまくいきそうな気がします。
で、if文のところを、a[1].nil?としてみたのですが、変化ありませんでした。

erb

1 <% @thru_1h_start.zip(@thru_10h_start).each do|(a,b)| %> 2 <% if a[1] <= 9 && a[1] >= 1 && b[1] == 18 %> 3 <span>インスタートで、アウトプレイ中 <%= a[1] %></span> 4 <% elsif a[1] == nil && b[1] <= 18 && b[1] >= 10 %> 5 <span>インスタートで、インプレイ中 <%= b[1] %></span> 6 <% elsif a[1] == 9 && b[1] <= 18 && b[1] >= 10 %> 7 <span>アウトスタートで、インプレイ中 <%= b[1] %></span> 8 <% elsif a[1] <= 9 && a[1] >= 1 && b[1] = nil %> 9 <span>アウトスタートで、アウトプレイ中 <%= a[1] %></span> 10 <% elsif a[1] == 9 && b[1] == 18 %> 11 <span>Finish</span> 12 <% end %> 13 <% end %>

controller

1@thru_1h_start = Score.where("created_at >= ?", Date.today).where(course: params[:course]).where(hole_number: 1..9).where.not(hole_score: nil).group(:round_id).maximum(:hole_number) 2@thru_10h_start = Score.where("created_at >= ?", Date.today).where(course: params[:course]).where(hole_number: 10..18).where.not(hole_score: nil).group(:round_id).maximum(:hole_number) 3

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

私はややこしくなってきた時、もっと簡単な方法はないか、考えます。
目的は
Player と 「このラウンドの最後のホール」の組み合わせを得る
ということで良いですね?

ホールのデータの入力は必ず済んだ順になっている、ということは保証されますか?
保証されるなら created_atが最大のもの、 で良いです。

保証されないとちょっとやっかいですが。一つの方法として、ホールの番号の他にsort用のホール番号を追加し、1ホール出発のときは1,2,...18トイレ、10ホール出発の時は 10,11,,,,,18,19,,,27 といれ、sort用ホール最大のもの を取ります。

投稿2020/12/02 01:14

winterboum

総合スコア23284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問