I'm trying to make a nested form. The situation is that I want to create events and relate them to a company, this from the event form, I already show the existing companies but at the time of saving, I get an error in the console
Unpermitted parameter: companies
While in the view it shows me
1 error prohibited this event from being saved: Company must exist
My code is as follows:
events_controller.rb
def new
@event = Event.new
@event.build_company
end
# POST /events
# POST /events.json
def create
@event = Event.new(event_params)
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Event was successfully created.' }
format.json { render :show, status: :created, location: @event }
else
format.html { render :new }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
....
private
# Use callbacks to share common setup or constraints between actions.
def set_event
@event = Event.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def event_params
params.require(:event).permit(:eve_descripcion, :eve_fecha, :eve_horaInicio, :eve_horaFin, :eve_recordatorio, :eve_observacion, companies_attributes:[:id])
end
_form.html.erb (update)
<%= form_with(model: event, local: true) do |form| %>
<% if event.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(event.errors.count, "error") %> prohibited this event from being saved:</h2>
<ul>
<% event.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="row">
<div class="col-10 offset-1">
<%= form.fields_for :type_events do |type_events| %>
<div class="form-group">
<%= type_events.label :emp_nombre, "Tipo de evento" %>
<%= type_events.collection_select(:type_event_id, TypeEvent.all, :id, :nombre, prompt: 'Selecciona un tipo de evento', class: "form-control") %>
</div>
<%end%>
<%= form.fields_for :companies do |companies| %>
<div class="form-group">
<%= companies.label :emp_nombre, "Empresa" %>
<%= companies.collection_select(:company_id, Company.all, :id, :emp_nombre, prompt: 'Selecciona una compañia', class: "form-control") %>
</div>
<%end%>
<div class="form-group">
<%= form.label :eve_descripcion, "Descripción" %>
<%= form.text_area :eve_descripcion, id: :event_eve_descripcion, class: "form-control", placeholder: "Temas a tratar en este evento" %>
</div>
<div class="form-group">
<%= form.label :eve_fecha, "Fecha del evento" %>
<%= form.date_select :eve_fecha, id: :event_eve_fecha, class: "form-control" %>
</div>
<div class="form-row">
<div class="form-group col-aut pr-4">
<%= form.label :eve_horaInici, "Hora de inicio" %>
<%= form.time_select :eve_horaInicio, id: :event_eve_horaInicio, class: "form-control" %>
</div>
<div class="form-group col-auto">
<%= form.label :eve_horaFin, "Hora de finalización" %>
<%= form.time_select :eve_horaFin, id: :event_eve_horaFin, class: "form-control" %>
</div>
</div>
<div class="form-group">
<%= form.label :eve_recordatorio, "Recordatorio" %>
<%= form.datetime_select :eve_recordatorio, id: :event_eve_recordatorio, class: "form-control" %>
</div>
<div class="form-group">
<%= form.label :eve_observacion, "Observaciones" %>
<%= form.text_area :eve_observacion, id: :event_eve_observacion, class: "form-control", placeholder: "Conclusiones" %>
</div>
<div class="actions">
<%= form.submit %>
</div>
</div>
</div>
<% end %>
company.rb
class Company < ApplicationRecord
has_many :events, dependent: :destroy
validates :emp_nombre, presence:true
end
event.rb
class Event < ApplicationRecord
belongs_to :company
accepts_nested_attributes_for :company, reject_if: proc { |attributes| attributes['id'].blank? }
end
Thank you in advance