I'm using grouped_collection_select
in filtering out associated information in a rails 5 form.
The first grouped_collection_select
works with the Property filtering out associated data relevant to Co-operators. But, the second grouped_collection_select
does work when filtering Fields associated to a Property, but comes up with an error when trying to save:
1 error prohibited this trial from being saved:
Field must exist
Form
<%= form_with(model: trial, local: true) do |f| %>
<label>Co-operator</label>
<%= f.collection_select :cooperator_id, Cooperator.order('last_name'), :id, :full_name %>
<label>Property</label>
<%= f.grouped_collection_select :property_id, Cooperator.order('last_name'), :properties, :full_name, :cooperator_id, :name %>
<label>Field</label>
<%= f.grouped_collection_select :field_id, Property.order('name'), :fields, :name, :property_id, :field_name %>
<%= f.submit 'Submit' %>
<% end %>
When I change the grouped_collection_select
to a collection_select
it works as should. But, this does't suit what i'm needing.
<%= f.collection_select :field_id, Field.all, :id, :field_name %>
Trials Controller
def trial_params
params.require(:trial).permit(:cooperator_id, :field_id, :property_id)
end
Trial Model
class Trial < ApplicationRecord
belongs_to :cooperator
belongs_to :property
belongs_to :field
end
Log
Processing by TrialsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"THfy+JGBYbNvzurUscPfP8LQbnnvIz1HBEfeFRiZrocXtiu4ayncEA8cNBA2IkPgcphLoa0QWsEueFBEP29OXA==", "trial"=>{"cooperator_id"=>"2", "property_id"=>"2", "field_id"=>""}, "commit"=>"Create trial", "id"=>"11"}
Cooperator Load (0.5ms) SELECT "cooperators".* FROM "cooperators" WHERE "cooperators"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]]
↳ app/controllers/trials_controller.rb:49
Property Load (0.4ms) SELECT "properties".* FROM "properties" WHERE "properties"."id" = $1 LIMIT $2 [["id", 2], ["LIMIT", 1]]
↳ app/controllers/trials_controller.rb:49
Field Load (0.4ms) SELECT "fields".* FROM "fields"
↳ app/views/trials/_form.html.erb:39
Rendered trials/_form.html.erb (15.3ms)
Rendered trials/edit.html.erb within layouts/application (16.6ms)
Rendered partials/_top_nav.html.erb (0.5ms)
Rendered partials/_main_nav.html.erb (0.8ms)
Completed 200 OK in 63ms (Views: 46.9ms | ActiveRecord: 8.2ms)
The form code doesn't look right to me, the first grouped collection should be something like:
<%= f.grouped_collection_select :property_id, Cooperator.order('last_name'), :properties, :full_name, :id, :name %>
# Notice that the cooperator_id
is replaced with id
because this needs to be the value that should be set on selection. Your original code would set it to the ID of the Cooperator instead of Property.
Similarly, the second one should be something like:
<%= f.grouped_collection_select :field_id, Property.order('name'), :fields, :name, :id, :field_name %>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With