Rails grouped_collection_select не работает при сохранении - PullRequest
0 голосов
/ 28 сентября 2018

Я использую grouped_collection_select при фильтрации связанной информации в форме rails 5.

Первый grouped_collection_select работает с Свойством , отфильтровывающим связанные данные, относящиеся к кооператоры .Но второй grouped_collection_select работает при фильтрации Поля , связанные с Свойством , но при попытке сохранить возникает ошибка:

1 error prohibited this trial from being saved:

Field must exist

Форма

<%= 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 %>

Когда я изменяю grouped_collection_select на collection_select, он работает следующим образом.Но это не соответствует тому, что мне нужно.

<%= f.collection_select :field_id, Field.all, :id, :field_name %>

Контроллер испытаний

def trial_params
 params.require(:trial).permit(:cooperator_id, :field_id, :property_id)
end

Пробная модель

class Trial < ApplicationRecord
  belongs_to :cooperator
  belongs_to :property
  belongs_to :field
end

Журнал

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)

1 Ответ

0 голосов
/ 01 октября 2018

Код формы мне не подходит, первая сгруппированная коллекция должна выглядеть примерно так:

<%= f.grouped_collection_select :property_id, Cooperator.order('last_name'), :properties, :full_name, :id, :name %> # Обратите внимание, что cooperator_id заменен на id, потому что это должно бытьзначение, которое должно быть установлено при выборе.В вашем исходном коде вместо идентификатора свойства будет установлен идентификатор Cooperator.

Аналогично, второй должен выглядеть примерно так:

<%= f.grouped_collection_select :field_id, Property.order('name'), :fields, :name, :id, :field_name %>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...