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

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

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

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

Q&A

解決済

1回答

3736閲覧

複数あるcollection_selectの値を動的に変更したい

seesaajira-

総合スコア107

Ruby on Rails

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

0グッド

1クリップ

投稿2016/03/25 02:19

編集2016/03/30 08:44

windowsアプリの経験はあるのですが、
今回、初めてwebアプリケーションを作成するので、webアプリの作法が分からず手間取っています。よろしくお願いします。

なんとかrailsにcocoonをインストールして追加ボタンで明細行を追加できる画面を作成しました。
しかし、1行目の名前列のcollection_selectの値はチーム列で選択した値で動的に変更させる事ができたのですが、明細行が複数になると2行目以降の名前列のcollection_selectが変更されません。

よろしくお願いします。

【画面のイメージ】
画面イメージ
・画面ヘッダ部のtextboxは試合日程、対戦チーム等の情報を入力します
・追加ボタンをクリックするとチーム、名前を選択する明細行が追加される
・追加される明細は固定ではなく可変です
・明細行のチームを選択すると名前の選択内容を選択されたチームで絞り込む

【routes.rb】

get 'games/team_select' => 'games#team_select'

【コントローラー】

def team_select @player_parent = PlayerParent.where(team_id:params[:team_id]).pluck(:name, :id) @player_parent.unshift(["選択して下さい",""]) end

【Viewソース】
・追加ボタン部分(_form.html.erb)

<div class="form-group"> <h2>umpires</h2> <div class=""> <%= link_to_add_association "追加", f, :umpires, class: 'btn btn-default', data: { association_insertion_node: '#detail-association-insertion-point', association_insertion_method: 'append' }%> </div> <table class="table table-list"> <thead> <tr> <th><%= f.label :team_id, :class => 'control-label' %></th> <th><%= f.label :player_parent_id, :class => 'control-label' %></th> <th><%= f.label :position, :class => 'control-label' %></th> <th></th> </tr> </thead> <tbody id='detail-association-insertion-point'> <div class="form-group"> <%= f.fields_for :umpires do |tounament| %> <%= render 'umpire_fields',f: tounament %> <% end %> </div> </tbody> </table> </div>

・明細チーム選択部分(_umpire_fields.html.erb)

<tr class="nested-fields"> <%= f.hidden_field :id %> <td class="form-group"> <%= f.collection_select :team_id, @team, :id, :name,{:prompt => "選択してください"}, {:class => 'form-control ',:id => 'select_team'} %> </td> <td class="form-group"> <%= render 'player_parent_select',{:f => f} %> </td> ・・・・ <script type="text/javascript"> $(function($) { $('#select_team').change(function(){ var team_id = $("#select_team").val(); $.get("team_select.js?team_id=" + team_id); }); }); </script>

・明細選手選択部分(_player_parent_select.html.erb)

<%= f.collection_select :player_parent_id, @player_parent,:id,:name, {}, {:class => 'form-control',:id => 'games_player_parent'} %>

(team_select.js.erb)

$("#games_player_parent").html("<%= escape_javascript(options_for_select(@player_parent)) %>");

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

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

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

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

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

sutonea

2016/03/29 10:07

プログラムの仕様が分かりづらいので、もう少し詳しく書いてください。一例をあげると、3つのテキストボックスへの入力値が何なのかわかりません。
guest

回答1

0

ベストアンサー

javascriptのchangeトリガーを発火させるセレクタが"#games_player_parent"になっていて、ループで同じIDを使い回しているせいで、一番最初のノードのIDしか反応しないのではないでしょうか?
HTMLでは、IDの重複は許されていません。
cocoonは使ったことがないので、cocoonの仕様上どのようにIDやクラス指定をしなければならないかわかりませんが、
Javascriptのchangeイベント捕捉のためのセレクタをCSSクラスなどにしてあげれば良いのではないかと思います。

投稿2016/03/30 10:13

rifuch

総合スコア1901

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問