Ruby on Rails Saving in two tables from one form

后端 未结 3 842
失恋的感觉
失恋的感觉 2020-12-10 09:43

I have two models Hotel and Address. Relationships are:

class Hotel
  belongs_to :user
  has_one    :address
  accepts_nested_attributes_for :address
         


        
3条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-10 10:22

    Bottom line here is you need to use the f.fields_for method correctly.

    --

    Controller

    There are several things you need to do to get the method to work. Firstly, you need to build the associated object, then you need to be able to pass the data in the right way to your model:

    #app/models/hotel.rb
    Class Hotel < ActiveRecord::Base
       has_one :address
       accepts_nested_attributes_for :address
    end
    
    #app/controllers/hotels_controller.rb
    Class HotelsController < ApplicationController
        def new
           @hotel = Hotel.new
           @hotel.build_address #-> build_singular for singular assoc. plural.build for plural
        end
    
        def create
            @hotel = Hotel.new(hotel_params)
            @hotel.save
        end
    
        private
    
        def hotel_params
            params.require(:hotel).permit(:title, :stars, :room, :price, address_attributes: [:each, :address, :attribute])
        end
    end
    

    This should work for you.

    --

    Form

    Some tips for your form - if you're loading the form & not seeing the f.fields_for block showing, it basically means you've not set your ActiveRecord Model correctly (in the new action)

    What I've written above (which is very similar to that written by Pavan) should get it working for you

提交回复
热议问题