Ruby on rails Rails接受\u嵌套的\u属性\u以验证错误

Ruby on rails Rails接受\u嵌套的\u属性\u以验证错误,ruby-on-rails,Ruby On Rails,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 目的地地址必须存在。当我将断点放在ride.sa

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
目的地地址必须存在。当我将断点放在ride.save之前时,ride看起来像:

#<Ride id: nil, price: 12.0, distance: 5.8, created_at: nil, updated_at: nil, user_id: 1, provider_id: 1>
#
错误的原因是什么?为什么需要起始地址和目的地址?这是由关联引起的吗?如何解决问题?
提前感谢。

尝试将属性的逆\u添加到关联中

请记住,rails 5使您属于默认情况下所需的关联


尝试将属性的反向添加到关联中

请记住,rails 5使您属于默认情况下所需的关联


您使用的是什么版本的rails?@neydroid rails 5.0.0您使用的是什么版本的rails?@neydroid rails 5.0。0@Mabama,感谢您的帮助,当我添加require:false作为所属对象时,create方法工作正常。@Mabama,感谢您的帮助,当我添加require:false作为所属对象时,create方法工作正常。
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
ActiveRecord::RecordInvalid: Validation failed: Start address ride must exist, 
#<Ride id: nil, price: 12.0, distance: 5.8, created_at: nil, updated_at: nil, user_id: 1, provider_id: 1>