Следующая форма для создания коллекции (вложенных) значений таблицы соединений, где
class Photo
has_many :keywordphotos
has_many :keywords, through: :keywordphotos
accepts_nested_attributes_for :keywords
и база данных имеет:
create_table "keywords", force: :cascade do |t|
t.string "name"
представление формы:
<%= form_for(@photo) do |f| %>
<%= f.collection_check_boxes(:keywords, @keywords, :id, :name) do |keyword| %>
<%= keyword.label { keyword.check_box } %>
<% end %>
<% end %>
генерирует следующий HTML
<label for="photo_keywords_3"><input type="checkbox" value="3" name="photo[keywords][]" id="photo_keywords_3" /></label>
<label for="photo_keywords_5"><input type="checkbox" value="5" name="photo[keywords][]" id="photo_keywords_5" /></label>
<label for="photo_keywords_4"><input type="checkbox" value="4" name="photo[keywords][]" id="photo_keywords_4" /></label>
, поэтому входные значения верны (согласно данным базы данных), но я ожидал, что объект :name
заполнит метку. Почему мое понимание ошибочно и как я могу заставить имя появляться после флажка?
[примечание: { keyword.check_box + keyword.name }
была предпринята попытка, но вернулась undefined method 'name' for #<ActionView::Helpers[...]
]