2016-07-22 34 views
0

基本上我想從API中提取一個團隊對象列表 - team_id和team_name是我感興趣的 - 因爲它可以讓我在稍後進行精確的API調用並使用選項填充下拉列表。我希望在下拉列表中提供「團隊名稱」列表,這些列表位於用於在應用程序中創建拼車對象的表單內。Rails 4,在內存中加載api響應下拉選擇?

到目前爲止,我有這樣的:被稱爲

carpool_controller.rb(共乘車#ts_add_teams_to_memory)控制器動作:

在哪裏,ts_teams是含有鍵散列數組[:名稱]和[:id]。 ts_add_teams_to_memory

  • 從API
  • 翻出屬性「名稱」和「ID」
  • 創建哈希抓住隊伍爲每個對象
  • 通過該散列到一個數組。
  • ts_teams表示散列數組。

合乘/ new.html.erb

這裏是我要通過AJAX到散列的數組傳遞到表單中。

<%= 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請求的正確路徑的鏈接:

<%= 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標籤創建表單?或者,有沒有更好的方法來做到這一點?我需要查看頁面上API返回的團隊選項列表,理想情況下無需重新加載頁面...

任何幫助表示讚賞!

+1

您應該呈現在JavaScript鑑於'collection_select'。你的'link_to'正在調用的動作應該是'respond_to do | format |' format.js end'然後你的觀點將與'js.erb'結束,您可以使用jQuery插入你在那裏要的數據'collection_select'。你不應該寫任何明確調用'ajax(...)'方法的javascript。這就是整個rails不顯眼的javascript問題。這說明相當不錯的位置:http://guides.rubyonrails.org/working_with_javascript_in_rails.html –

回答

1

你需要編寫一些JavaScript代碼來做到這一點。

自己動手在CoffeeScript中,這將是類似的東西:分別是#xxx-ids到AJAX形式和選擇元素ID

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

變化。

我建議嘗試以下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