Несколько дней go Мне удалось создать вложенную форму, которая позволяет создать объект, который будет связан с захватывающим родителем, или создать (с вложенным полем для) новую запись родителя. Я использовал ту же технику для написания форм для родителя и ребенка (так как у родителя также есть родительская и вложенная форма для обоих), и они работали в течение нескольких дней.
Теперь я могу сохранить только нового ребенка запись, если я заполняю вложенные поля для родителя, я не могу выбрать захватывающего родителя из списка select2. Со вчерашнего дня я проверял свои коммиты (когда формы перестали работать), но не смог найти что-то, что я изменил, и это связано с этим.
код дочернего контроллера:
def new
@crm_opportunity = CrmOpportunity.new
@crm_opportunity.build_crm_contact
end
def create
@crm_opportunity = CrmOpportunity.new(crm_opportunity_params)
if @crm_opportunity.save
redirect_to crm_opportunity_path(@crm_opportunity)
else
puts @crm_opportunity.errors.inspect
render :new
end
end
def crm_opportunity_params
params.require(:crm_opportunity).permit(:source, :title, :status, :crm_contact_id, :crm_customer_id, :crm_section_id,
crm_contact_attributes: [:crm_customer_id, :name, :email, :job_title, :work_phone, :personal_phone, :main_contact, :bookkeep],...)
код вложенной формы:
<div class="form_inputs">
<%= f.association :crm_contact, label: 'Contact Name', collection: CrmContact.order(:name), value_method: :id, prompt: "Choose an existing contact", input_html: {class:"select2"} %>
<button type="button" class="hidden-fields-opener btn green-almond btn-xs" >Or Create new contact</button>
<%= f.simple_fields_for :crm_contact, @crm_opportunity.build_crm_contact do |ff| %>
<div style="display:none;" class="hidden-fields well">
<%= ff.input :name, label: 'Contact - Full Name' %>
<%= ff.association :crm_customer, collection: CrmCustomer.order(:name), value_method: :id, prompt: "Choose an existing Company", input_html: {class:"select2"}, label: 'Company Name' %>
</div>
<% end %>
модель возможности:
class CrmOpportunity < ActiveRecord::Base
belongs_to :crm_contact
accepts_nested_attributes_for :crm_contact
belongs_to :crm_section
validates :title, :status, :source, presence: true
модель контакта:
class CrmContact < ActiveRecord::Base
belongs_to :crm_customer
accepts_nested_attributes_for :crm_customer
has_many :crm_opportunities
accepts_nested_attributes_for :crm_opportunities
end
параметров при попытке выбрать родителя из списка:
, если я использую те же атрибуты, что и эти параметры, для создания новой записи в консоли. работает, но с формой это не так.
"crm_opportunity"=>{"crm_contact_id"=>"24",
"crm_contact_attributes"=>{"name"=>"",
"crm_customer_id"=>"",
"job_title"=>"",
"email"=>"",
"work_phone"=>"",
"personal_phone"=>"",
"main_contact"=>"false",
"bookkeep"=>"false"},
"title"=>"fedwsa",
"source"=>"our_initiative",
"status"=>"active",
"crm_section_id"=>"27"},
"commit"=>"Create Crm opportunity"}
log:
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
CrmContact Load (0.1ms) SELECT "crm_contacts".* FROM "crm_contacts" WHERE "crm_contacts"."id" = ? LIMIT 1 [["id", 24]]
(0.1ms) begin transaction
SQL (1.0ms) INSERT INTO "crm_contacts" ("name", "email", "job_title", "work_phone", "personal_phone", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) [["name", ""], [
"email", ""], ["job_title", ""], ["work_phone", ""], ["personal_phone", ""], ["created_at", "2020-02-17 12:39:46.415651"], ["updated_at", "2020-02-17 12:39:46.415651"]]
(0.1ms) rollback transaction
Completed 500 Internal Server Error in 9ms (ActiveRecord: 1.3ms)
ActiveRecord::StatementInvalid (SQLite3::ConstraintException: NOT NULL constraint failed: crm_contacts.crm_customer_id: INSERT INTO "crm_contacts" ("name", "email", "job_title", "
work_phone", "personal_phone", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?)):
Спасибо !!!