2015-08-15 59 views
0

我有一個數組@sources,它包含源的名稱(字符串)。在視圖中,我想用遠程表單中的複選框列出每個源代碼。然後在鏈接的控制器動作中,我希望在params散列中有一個數組,只包含那些用戶在提交之前檢查過的數據源。如何使用form_tag和複選框從數組中選擇選項

我嘗試手動這樣做,就像這樣:

<%= form_tag select_sources_user_wordsearch_path(@user, @wordsearch), {method: :post, remote: true} do %> 
    <% @sources.each do |source| %> 
    <div class="form-group"> 
     <div class="checkbox"> 
     <label class="pull-left"> 
      <input type="checkbox" class="pull-right"> <%=source%> 
     </label> 
     </div> 
    </div> 
    <% end %> 
    <div class="form-group"> 
    <%= submit_tag "Start Search",id:"search_commit", class: "btn btn-primary" %> 
    </div> 
<% end %> 

但提交表單的時候,我甚至不看params散列,:

Started POST "https://stackoverflow.com/users/1/wordsearches/77/select_sources" for 127.0.0.1 at 2015-08-15 16:18:06 +0200 
Processing by WordsearchesController#select_sources as JS 
Parameters: {"utf8"=>"✓", "commit"=>"Start Search", "user_id"=>"1", "id"=>"77"} 

所以我環顧四周,看form_tag幫手和發生了什麼事情。在check_box_tag的API page(請參閱註釋)中,我發現可以將集合傳遞給它並在params散列中的數組中接收選擇的結果。基本上,我上面描述。

我想知道如何在一個遠程表單中使用數組(而不是集合)來完成form_tag

form_tagAPI page我找不到有關數據如何傳輸到控制器的任何信息。在check_box_tag中沒有提及如何處理集合。

誰能告訴我這是怎麼完成的「Rails的方式」? 它必須比我想象的容易..

回答

1

第一個問題:你爲什麼不使用form_for幫手?可能是像form_for @wordsearch, url: select_sources_user_wordsearch_path(@user, @wordsearch), {method: :post, remote: true} do

你也可以看看the API的幫助collection_check_boxes

Afaik這隻能與form_for和相應的表單對象一起使用。

<%= form_for @wordsearch do |form| %> 
    <%= form.collection_check_boxes(:source_ids, @sources, :id, :labeling_method) %> 
<% end %> 

假設@sources是某種對象。在你的情況下

<%= form_for @wordsearch do |form| %> 
    <%= form.collection_check_boxes(:sources, @sources, :to_s, :to_s) %> 
<% end %> 

也可以工作。 (沒試過吧!)

另一種方法是隻手動發送值,就像這樣:

<% @sources.each do |source| -%> 
    <%= check_box_tag "wordsearch[sources][]", source -%> 
    <%= source -%> 
<% end -%> 

希望這有助於。

+0

謝謝,我會嘗試這些方法。 – Flip

相關問題