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

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

ただいまの
回答率

90.48%

  • Ruby on Rails

    7510questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,056

seesaajira-

score 49

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)) %>");
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Shusuke_Ishige

    2016/03/29 19:07

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

    キャンセル

回答 1

checkベストアンサー

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • Ruby on Rails

    7510questions

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