DeepHill
@DeepHill

Почему FormOptionsHelper collection_check_boxes (Rails 4.1.0) создает пустое значение (value="")?

Есть две модели Article и Tag связаные HABTM:

article.rb
class Article < ActiveRecord::Base
	has_and_belongs_to_many :tags
end

tag.rb
class Tag < ActiveRecord::Base
	has_and_belongs_to_many :articles
end

Хочу вывести теги в виде чекбоксов в форме редактирования статьи:

_form.html.erb
<p>
    <%= f.label "Tags" %><br>
    <%= f.collection_check_boxes :tag_ids, Tag.all, :id, :name%>
  <p>

генерируется такой код:

html
<p>
    <label for="article_Tags">Tags</label><br>
    <input checked="checked" id="article_tag_ids_1" name="article[tag_ids][]" value="1" type="checkbox"><label for="article_tag_ids_1">Linux</label><input checked="checked" id="article_tag_ids_3" name="article[tag_ids][]" value="3" type="checkbox"><label for="article_tag_ids_3">Ubuntu</label><input checked="checked" id="article_tag_ids_4" name="article[tag_ids][]" value="4" type="checkbox"><label for="article_tag_ids_4">Windows</label><input name="article[tag_ids][]" value="" type="hidden">
  </p>

соответственно в params передается пустое значение:

Parameters:
"tag_ids"=>["3",
 ""]

UPD:
Спасибо за ответ Dimitriy:
Пустое значение используется, чтоб не писать обработку удаления связанных элеметнов, если не выбирите не одного чекбокса.
  • Вопрос задан
  • 2956 просмотров
Решения вопроса 1
DeepHill
@DeepHill Автор вопроса
Проблема вот в этой строчке
<input name="article[tag_ids][]" value="" type="hidden">
которую генерирует collection_check_boxes

Спасибо за ответ @Vakiliy:
Пустое значение используется, чтоб не писать обработку удаления связанных элеметнов, если не выбирите не одного чекбокса.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Vakiliy
@Vakiliy
Подозреваю, что, в контроллере не хватает параметра для белого списка - tag_ids: []
params.require(:article).permit(...., tag_ids: [])
Ответ написан
Комментировать
Toy
@Toy
Front-end Developer @ Starbucks
railscasts.com/episodes/196-nested-model-form-part-1 (устаревший скринкаст, но даёт понимание проблемы).
А решение тут: api.rubyonrails.org/classes/ActiveRecord/NestedAtt...
Ответ написан
@shilovk
Нужно задать include_hidden: false и тогда скрытый элемент не будет добавляться в форму.

<%= f.collection_check_boxes :tag_ids, Tag.all, :id, :name, include_hidden: false %>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы