Polymorphic association and nested attributes :: error =>: blank

I am trying to keep a deeply nested form. There are three different models: Applications, Applicants and Addresses. Addresses are polymorphic because they can be used by both Applications and Applicants. These are the parameters I'm sending:

{"application"=>{ "loan_type"=>"purchase", "loan_amount"=>2500000, "borrower_attributes"=>{ "first_name"=>"Test", "middle_name"=>"Test", "last_name"=>"Test", "birthdate"=>"01/01/1970", "phone"=>"1231231234", "email"=>" test@me.com ", "marital_status"=>"married", "address_attributes"=>{ "street_address"=>"xxxx Mission Street", "city"=>"San Francisco", "state"=>"CA", "zip"=>xxxxx } } }} 

When this is sent in my request, I get the following response:

 <Address id: nil, street_address: "1045 Mission Street", city: "San Francisco", state: "CA", zip: 94103, addressable_type: "Applicant", addressable_id: nil, created_at: nil, updated_at: nil> 

And the following error message:

 @messages={:"borrower.address.addressable"=>["must exist"]}, @details={"borrower.address.addressable"=>[{:error=>:blank}]} 

Why can't I set nested attributes? What do I need to fix to make this work?

Here are my relevant files:

Application.rb

 class Application < ApplicationRecord before_save :assign_addresses! belongs_to :borrower, class_name: 'Applicant' belongs_to :coborrower, class_name: 'Applicant', optional: true has_one :address, as: :addressable accepts_nested_attributes_for :borrower accepts_nested_attributes_for :coborrower accepts_nested_attributes_for :address end 

Applicant.rb

 class Applicant < ApplicationRecord has_many :applications has_one :address, as: :addressable validates_presence_of :first_name, :last_name, :phone, :email, :birthdate accepts_nested_attributes_for :address end 

Address.rb

 class Address < ApplicationRecord belongs_to :addressable, polymorphic: true validates_presence_of :street_address, :city, :state, :zip end 

Applications_Controller.rb

 class Api::ApplicationsController < ApplicationController ... def create @application = Application.new(application_params) if @application.save render json: @application, status: :created else render json: @application.errors, status: :unprocessable_entity end end private def application_params params.require(:application).permit(:loan_type, :loan_amount, borrower_attributes: [:first_name, :middle_name, :last_name, :birthdate, :phone, :email, :ssn, :marital_status, address_attributes: [:street_address, :city, :state, :zip]]) end end 
+5
source share
2 answers

Problem detected. After adding optional: true to Address belongs_to everything worked fine. This is the new Rails 5 convention. I remembered putting it to work, but not there. Hope this helps someone!

+6
source

just follow these steps:

 {"application"=>{ "loan_type"=>"purchase", "loan_amount"=>2500000, "applications_borrower_attributes"=>{"0"=>{ "first_name"=>"Test", "middle_name"=>"Test", "last_name"=>"Test", "birthdate"=>"01/01/1970", "phone"=>"1231231234", "email"=>" test@me.com ", "marital_status"=>"married"}, "borrowers_address_attributes"=>{"0"=>{ "street_address"=>"xxxx Mission Street", "city"=>"San Francisco", "state"=>"CA", "zip"=>xxxxx } } } }} 
0
source

All Articles