2017-05-21 6 views
0

collection check boxesのドキュメントが分かりにくいです。パラメータの説明は次のとおりです。Railsのcollection_check_boxesがフォームから結果を取得する

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

戻り値は、オブジェクトのクラスのメソッドの既存の戻り値の収集のために箱のタグを確認してください。インスタンスオブジェクトのメソッド呼び出しから返された値が選択されます。呼び出しメソッドがnilを返す場合、選択は行われません。

"オブジェクト"(最初の引数)は何であるかわかりません。私は2つの異なる可能性を試して、違う失敗をしました。

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

私のアプリがwikiの編集をサポートしているということです。私はwikiのオーナーがチェックボックスを使って共同編集者のリストにユーザーを追加したり削除したりすることができるようにしたいと考えています(少数のユーザーがいる場合に限り実用的です)。 collaborating_user_idsは、協力者の現在のリストを返すWikiのインスタンスメソッドです。現在の共同編集者をチェックして、すべてのユーザーの名前を表示します。

これはディスプレイ上で動作しますが、このフォームから返されたparamsを調べると、チェックされたチェックボックスは何も表示されません。一方、シンボル:wikiをインスタンス変数@wikiに置き換えると、チェックボックスはwikiに関連付けられたparamsに表示されますが、最初はチェックボックスが正しく設定されていません。

collection_check_boxesの最初のパラメータは実際にはわかりませんが、私が見たすべての例ではシンボルが表示されています。

答えて

0

アソシエーションが正しく設定されているとします。

オブジェクトは、編集中のモデルである必要があります。 はい、あなたはほとんどそこにいます。強力なパラメータの中にwikiコントローラのcollaborative_user_idsを必ず含めてください。これはウィキがこの

<%= form_for @wiki do |f| %> 
    <%= f.collection_check_boxes :collaborating_user_ids, User.all, :id, :name %> 
    <%= f.submit %> 
<% end %> 
のようなものを見ることができる協力者

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

あなたのフォームを受け入れることができます

関連する問題