Rails accepts_nested_attributes_for validation error -


model ride.rb

class ride < activerecord::base .. has_one :start_address, class_name: "address" has_one :destination_address, class_name: "address"  accepts_nested_attributes_for :start_address, :destination_address .. end 

model address.rb

class address < activerecord::base   belongs_to :ride end 

rides_controller.rb

class ridescontroller < applicationcontroller   before_action :authenticate_user!   before_action :set_providers, only: [:new, :create]   expose :rides   expose :ride, attributes: :ride_params   def index   end    def new     @start_address = ride.build_start_address     @destination_address = ride.build_destination_address   end    def create     ride.user = current_user     if ride.save       redirect_to root_path, notice: i18n.t('shared.created', resource: 'ride')     else       render :new     end   end    private   def ride_params     params.require(:ride).permit(:price, :provider_id,         start_address_attributes: [:street, :city, :country],         destination_address_attributes: [:street, :city, :country])   end    def set_providers     @providers = provider.all   end end 

i have problem saving object ride in create action. there error:

activerecord::recordinvalid: validation failed: start address ride must exist,  

destination address ride must exist. when put breakpoint before ride.save, ride looks like:

#<ride id: nil, price: 12.0, distance: 5.8, created_at: nil, updated_at: nil, user_id: 1, provider_id: 1> 

what cause of error? why start_address , destination_address required? caused association has_one? how resolve problem? in advance.

try add inverse_of attribute associations.

remember rails 5 makes belongs_to association required default.

http://blog.bigbinary.com/2016/02/15/rails-5-makes-belong-to-association-required-by-default.html


Comments