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
Post a Comment