お世話になっております。
あるマスタデータの総当り形式でのデータ入力フォームを作ろうとしています。
仮に、「A地点からB地点へ移動すると5pt、B地点からC地点だと10pt」という要件だとします。
| |A |B |C | |--|--|--|--| |A | |5 | | |B | | |10| |C | | | |
例として、以下の2テーブルがあるとします。
Spotsテーブル - id - name Pointsテーブル - id - from_spot_id - to_spot_id - point
それぞれの区画には input type="text"
のテキストフォームがあります。
nameを result_[from_spot_id]_[to_spot_id]
として区別する想定です(端折ってます)。
簡単なソース例が下記です。
ruby
1# controller 2@spots = Spot.all 3 4# view 5<% @spots.each do |from| %> //縦のループ 6 7 <tr> 8 <td><%=from.name%></td> 9 <% @spots.each do |to| %> // 横のループ 10 <td> 11 <input type="text" name="result_<%=from.id%>?<%=to.id%>" value=""> 12 </td> 13 <% end %> 14 </tr> 15 16<% end %>
このようにSpotsテーブルのデータを入れ子でループして、table要素で表を作っています。
POSTされたデータはPointsテーブルへINSERTされます。
前置きが長くなりましたが、ここからが問題で、、
「新規登録時は上記でよいが、更新時はどのデータを取得してviewに展開すればよいか」で悩んでおります。
- 登録したpointデータはPointsテーブルにあるので、Pointsテーブルからのデータを取得して展開しようすると、Pointsテーブルに存在しない組み合わせのデータが展開できない。
- 登録時にすべての組み合わせのデータをPointsテーブルにINSERTしておけばレコードは登録できるが、あとからspotsテーブルのデータが追加された場合、やはりPointsテーブルにデータがないのでviewに展開できない。
- CROSS JOIN と LEFT JOINでがんばってviewに展開しやすい形に加工して取ってくるやり方がありそうだが、CROSS JOIN以外の方法で何とかならないか。
分かりにくい説明で恐縮ですが、何かアドバイスいただければ幸いです。
実ソースでなく、考え方だけでも結構です。
RailsとPHPのタグをつけましたが、言語というよりは考え方の質問なので言語は問いません。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。