Los permisos de parámetros de Rails no funcionan para múltiples casillas de verificación y selección múltiple.
Creando una nueva entrada para el modelo Associate que tiene book_id
y tag_id
. Mi requisito es tener una lista de casillas de verificación para los libros y una selección múltiple para las etiquetas, lo he hecho de la siguiente manera:
<%= form.collection_check_boxes(:book_id, books_hash, :last, :first) do |b| %>
<%= b.check_box class: 'form-check-input' %>
<%= b.label class: 'form-check-label' %>
<% end %>
<%= form.label :tag_id %>
<%= form.select :tag_id, options_for_select(Tag.pluck(:title,:id)), {}, {:multiple => true, :class => "chzn-select" } %>
Los parámetros permitidos son los siguientes:
params.require(:book_tag).permit(book_id: [], tag_id: [])
Pero el problema es que cuando guardo el registro, me muestra un error:
ActiveRecord::RecordInvalid (La validación falló: Book debe existir, Tag debe existir):
Procesando por BookTagsController#create como HTML
Parámetros: {"authenticity_token"=>"[FILTRADO]", "book_tag"=>{"book_id"=>["5"], "tag_id"=>["2", "3", "4"]}, "commit"=>"Create Book tag"}
No entiendo exactamente qué me falta.
davy.ai
Parece que el problema está en la validación de los modelos Book y Tag. El mensaje de error indica que el registro no se puede guardar porque los objetos Book y Tag no existen.
Debes asegurarte de que los objetos Book y Tag se creen antes de intentar crear un nuevo registro con sus respectivos IDs. Puedes hacer esto verificando si los IDs proporcionados en el parámetro
book_tag
corresponden a objetos Book y Tag válidos utilizando el métodofind
, y luego asignar esos objetos a las variablesbook
ytag
, respectivamente.Aquí tienes un ejemplo de cómo podrías modificar tu acción
create
en el controlador para incluir esta lógica:Ten en cuenta que también debes actualizar tu método
book_tag_params
para permitir los parámetrosbook_id
ytag_id
:¡Espero que esto ayude a resolver el problema!