Ruby on Rails Saving in two tables from one form

model, ruby-on-rails, save

Solution

You are using `wrong method` for appending your child with the parent.And also it is `has_one relation`,so you should use `build_model` not `model.build`.Your `new` and `create` methods should be like this

class HotelsController < ApplicationController
  def new
    @hotel = Hotel.new
    @hotel.build_address #here
  end

  def create
    @hotel = current_user.hotels.build(hotel_params)

    if @hotel.save      
      flash[:success] = "Hotel created!"
      redirect_to @hotel
    else
      render 'new'      
    end    
  end

Update

Your `hotel_params` method should look like this

def hotel_params
   params.require(:hotel).permit(:title, :stars, :room, :price,address_attributes: [:country,:state,:city,:street])
end

Problem

I have two models Hotel and Address. Relationships are: ``` class Hotel belongs_to :user has_one :address accepts_nested_attributes_for :address ``` and ``` class Address belongs_to :hotel ``` And I need to save in hotels table and in addresses table from one form. The input form is simple: ``` <%= form_for(@hotel) do |f| %> <%= f.text_field :title %> ......other hotel fields...... <%= f.fields_for :address do |o| %> <%= o.text_field :country %> ......other address fields...... <% end %> <% end %> ``` Hotels controller: ``` class HotelsController < ApplicationController def new @hotel = Hotel.new end def create @hotel = current_user.hotels.build(hotel_params) address = @hotel.address.build if @hotel.save flash[:success] = "Hotel created!" redirect_to @hotel else render 'new' end end ``` But this code doesn't work. ADD 1 Hotel_params: ``` private def hotel_params params.require(:hotel).permit(:title, :stars, :room, :price) end ``` ADD 2 The main problem is I don't know how to render form properly. This ^^^ form doesn't even include adress fields (country, city etc.). But if in the line ``` <%= f.fields_for :address do |o| %> ``` I change :address to :hotel, I get address fields in the form, but of course nothing saves in :address table in this case. I don't understand the principle of saving in 2 tables from 1 form, I'm VERY sorry, I'm new to Rails...

Original source