2010-12-13 15 views

答えて

48

これを行うための最も簡単な方法は、アレイになるために、これらのチェックボックスを設定することです。

HTML:

<input type="checkbox" name="tag_ids[]" value="1" /> 
<input type="checkbox" name="tag_ids[]" value="2" /> 
<input type="checkbox" name="tag_ids[]" value="3" /> 

コントローラー:。

tag_ids = params[:tag_ids] 

(もちろん、あなたはおそらくビューでform_forベースのヘルパーを使用していると思いますので、タグIDを大量に割り当てるこの

+0

を行う

<%= form_for(@cleaner) do |f| %> <p> <%= f.label :cities %><br /> <% for city in City.all %> <%= check_box_tag "cleaner[city_ids][]", city.id, @cleaner.cities.include?(city) %> <%=h city.name %><br /> <% end %> </p> <div class="actions"> <%= f.submit %> </div> <% end %> 

とコントローラ

def cleaner_params params.require(:cleaner).permit(city_ids: []) end 

にあなたは「道のレール」に完全なチュートリアルを見つけることができ、ユーザーがチェックボックスを選択解除した場合はどうなりますか? tag_ids []は空の配列として送信されますか? –

+4

@Joe Van Dyk:HTTPリクエストで 'tag_ids []'という名前の値が指定されていない場合、Railsは 'params'に' tag_ids'を入れるとは考えません。例えば、 'params [:tag_ids] || = []' – Matchu

+8

このHTMLを取得するには、 'fcheckbox :: tag_ids、{multiple:true}、1、nil'を実行することができます。 'nil'は"隠された0入力なし "を意味します。この種のものは、文書化されていません。 –

-2

checkedパラメータを使用する場合は、次のように記述する必要があります。

check_box_tag "tag_ids[]", 1, true 

ではなく、この:

check_box_tag 'tag_ids[]', 1, true 

それは把握する私にしばらく時間がかかったが、私はそれが誰かを助けることを願っています。

+0

ここで、一重引用符と二重引用符の違いは何ですか? –

14
f.check_box :tag_ids, {multiple: true}, 1, nil 

が正しい答えです:あなたの入力は、アレイに配置することを可能にするオプション:ここで

が理由で、「真の複数が」そこにあります。 multiple:trueオプションがない場合、これは許可されません。

0

ここでは、複数の都市に複数のクリーナーを置くことができるビューとコントローラーの例を示します。このhttps://kolosek.com/rails-join-table/

関連する問題