2016-07-22 5 views
0

基本的に私はAPIからチームオブジェクトのリストを取得したいと思っています - チームIDとチーム名は私が興味を持っているものです - 後でAPI呼び出しを行い、オプション付きのドロップダウンリストを作ることができます。私は、アプリケーション内にカープールオブジェクトを作成するために使用されるフォームの中のドロップダウンリストに「チーム名」のリストを用意したいと考えています。Rails 4、メモリ内にAPIレスポンスを読み込んでドロップダウンを選択していますか?

carpool_controller.rb(カープール#1 ts_add_teams_to_memory)コントローラのアクションが呼び出される:、ts_teams

キーを含むハッシュの配列であり、[名前]

は、これまで私はこれを持っていますと[:id]。 API

  • からts_add_teams_to_memory

    • グラブチームは、属性「名称」を引き出し、「ID」
    • 各オブジェクト
    • のハッシュを配列にそのハッシュを通過作成します。
    • ts_teamsは、そのハッシュの配列を表します。

    相乗り/ new.html.erb

    ここで私は、AJAX経由にハッシュの配列を渡したいフォームです。

    <%= link_to "Get Teams", ts_add_teams_to_memory_path(current_user.id), 
          remote: true, 
          method: :get, 
          class: "btn btn-success left", 
          data: {toggle: "modal", target: "#ts_loading"} %> 
    

    私はフォームを作成カープールでcollection_selectタグにハッシュの配列をプッシュするにはどうすればよい:ここで

    <%= form_for @carpool do |f| %> 
        <h3>Select Team</h3> 
        <div class="form-group"> 
         <%= f.collection_select :team_id, #INSERT ARRAY OF HASHES VIA AJAX?, :id, :name, include_blank: true %> 
        </div> 
         <%= f.submit 'Create Carpool', :class => 'button left' %> 
        <% end %> 
    

    は、私が正しいパスにAJAXリクエストを送信するために使用していますリンクですか?または、これを行うためのより良い方法がありますか?私は、ページ上のAPIから返されたチームオプションの一覧を表示する必要があります。ページをリロードしなくても理想的です...

  • +1

    javascriptビューで 'collection_select'をレンダリングする必要があります。あなたの 'link_to'が呼んでいるアクションは' respond_to do | format | format.js end'を実行すると、ビューは 'js.erb'で終了し、jqueryを使用して、そこに必要なデータとともに' collection_select'を挿入することができます。明示的に 'ajax(...)'メソッドを呼び出すjavascriptを書く必要はありません。それはレールの邪魔にならないjavascriptの全体のポイントです。 http://guides.rubyonrails.org/working_with_javascript_in_rails.html –

    答えて

    1

    は、あなたがそれを行うには、いくつかのJavaScriptコードを記述する必要があります。 Ajaxフォームとselect要素IDへ#xxx-idsそれぞれ

    $('#ajax-id').on 'ajax:success', (data) -> 
        data.teams.forEach (team) -> 
        $('#select-id').append("<option value=#{team.id}>#{name}</option>") 
    

    変更:

    はCoffeeScriptの中でそれを自分で行うには、それはそのようなことになります。

    私はあなたの人生がずっと容易にするために、以下のJavaScriptライブラリのいずれかを試してみることをお勧め:

    彼らの両方が、AJAXを使用してリモートデータをサポートしています。

    +0

    ありがとう私はそれをチェックアウトします – matthewalexander

    +0

    私はcoffeescriptで自分でそれを行う方法の例を追加しましたが、あなたがこの種のリモートドロップダウンをたくさん持っているならば、おそらく面倒ではないでしょう。 =) – Ivan

    +0

    反応を使用することを考えていましたが、この時点でちょっと殺すことができます。それは洗練されたソリューションのように見えます。そしてこのコードは、私がrailsタグcollection_selectタグを使用し続けることを許しますか? – matthewalexander

    0

    コントローラ(あなたのアクションでts_add_teams_to_memoryを呼び出すことを確認してください):

    def ts_add_teams_to_memory 
        @ts_teams = current_user.ts_add_teams_to_memory 
    end 
    

    ビュー:

    <%= f.collection_select :team_id, @ts_teams, :id, :name %> 
    
    +0

    この方法では、新しいページが必要です。私が後にしていることではなく、ajaxで行う必要があります。私はAPIからデータを保存しないようにしたい - 私は、ページの更新後、そのデータはもはや利用できなくなることを理解しています。 – matthewalexander

    関連する問題