2017-05-21 40 views
0

我發現 collection check boxes的文檔很難理解。這些參數的解釋是:collection_check_boxes在Rails從表格中獲取結果

collection_check_boxes(object, method, collection, value_method, text_method, options = {}, html_options = {}, &block) public 

返回複選框標籤法的現有返回值的集合對象的類。將從實例對象的調用方法返回的值將被選中。如果調用方法返回nil,則不進行選擇。

我不確定的是「對象」(第一個參數)應該是什麼。我嘗試了兩種不同的可能性,並得到不同的失敗。

<%= collection_check_boxes(:wiki, :collaborating_user_ids, User.all, :id, :name) do |b| %> 
    <li> 
     <%= b.check_box %> 
     <%= b.label %> 
    </li> 
<% end %> 

這個想法是,我的應用程序支持編輯維基。我希望wiki所有者能夠使用複選框從協作者列表中添加和刪除用戶(這當然只有在少數用戶的情況下才是實用的)。 collaborating_user_ids是返回當前協作者列表的Wiki的實例方法。我想顯示所有用戶的名稱,並選中當前的協作者。

這適用於顯示,但是當我檢查此表單返回的params時,沒有任何內容顯示檢查了哪些複選框。另一方面,如果我用實例變量@wiki替換符號:wiki,則複選框將顯示在與Wiki關聯的params中,但最初複選框的設置不正確。

我實際上並不知道collection_check_boxes的第一個參數應該是什麼,但我看過的每個示例都顯示了一個符號。

回答

0

假設您的關聯設置正確。

該對象應該是您正在編輯的模型。 所以是的,你幾乎在那裏。確保在wiki控制器中的強大參數中包含collaborating_user_ids。這將允許維基接受合作者

# inside your wiki controller 
class WikisController < ApplicationController 
    def wiki_params 
    params.require(:wiki).permit(collaborating_user_ids: [], ...) 
    end 
end 

你的形式可以是這個樣子

<%= form_for @wiki do |f| %> 
    <%= f.collection_check_boxes :collaborating_user_ids, User.all, :id, :name %> 
    <%= f.submit %> 
<% end %>