вложенная форма перестала работать после того, как удалось создать новый родительский объект / выбрать связанный родительский элемент из вложенного поля select2 - PullRequest
0 голосов
/ 17 февраля 2020

Несколько дней 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 (?, ?, ?, ?, ?, ?, ?)):

Спасибо !!!

...