Во-первых, вам, скорее всего, не нужно accepts_nested_attributes_for
.
Если вы хотите, чтобы пользователь мог выбирать записи с помощью выбора, вам на самом деле не нужно ничего делать, кроме как создатьвыберите и внесите в белый список атрибут material_id
:
<%= form_for(@material) do |f| %>
<div class="field">
<%= f.label :rubic_id %>
<%= f.collection_select :rubic_id, Rubic.all :id, :name %>
</div>
<%= f.submit %>
<% end %>
При выборе будет создан массив в параметрах.
class MaterialsController
# POST /materials
def create
@material = Material.new(material_params)
if @material.save
redirect_to @material
else
render :new
end
end
private
def material_params
params.require(:material)
.permit(:foo, :bar, material_ids: [])
end
end
accepts_nested_attributes_for
действительно предназначен для случая, когда вам нужно создавать / редактировать вложенные ресурсы в одном запросе.Единственная причина, по которой вы бы использовали его здесь:
- Пользователь должен иметь возможность создавать материал в той же форме.
- У вас есть таблица соединения с дополнительными атрибутами (например, количествонапример), который вы хотите, чтобы пользователь мог установить.
Вы все еще можете сделать 1. вместе с выбором выше, но вы не можете использовать accepts_nested_attributes_for
для установки простого belongs_to
ассоциация.И вам не хотелось бы использовать ракету, чтобы бить гвоздем.