fields_for doesnt working

I’am working on a project about a booking system for a hotel, i have the Client model and the Reservation model, the client has_many reservations and the reservation belongs_to :client.

The problem si that when i want to create a new reservation, i want to be able to create a client in the same form…

Here is the form:

<%= form_for(@reserva) do |f| %> <% if @reserva.errors.any? %>

<%= pluralize(@reserva.errors.count, “error”) %> prohibited this reserva from being saved:

    <% @reserva.errors.full_messages.each do |msg| %>
  • <%= msg %>
  • <% end %>
<% end %>
<%= f.label :cliente_id %> <% clientes_array = Cliente.all.map { |cliente| [“#{cliente.nombre} #{cliente.apellido}”, cliente.id] } %> <%= f.select(:cliente_id, options_for_select(clientes_array)) %>
Cliente Nuevo? <%= check_box_tag ‘con_cliente’, ‘ClienteNuevo’, false %>

            <div id="cliente_form">
                <%= f.fields_for :cliente  do |cliente_builder| %>
                  <div class="span12 field-box">
                    <label>Nombre:</label>
                    <%= cliente_builder.text_field(:nombre, class: "span9") %><br />
                </div>

and here is the controller:

class ChecksController < ApplicationController def checkin @reserva = Reserva.new cliente = @reserva.build_cliente end

when i try to add a reservation, i complete the client fields_for but when the reservation is created, the client is equal to nil…

Any ideas ??

The first rule of debugging is always to identify which section is going wrong. First look log/development.log where you can see the parameters passed to the controller. If they look right then you can start debugging the controller to see where the problem is (you can use puts statements in the controller code to print data, which will appear in the server terminal window). If the parameters look wrong then the problem is with the view, so then inspect the html to see if that is correct, and so on. Keep splitting the problem down so you identify a smaller and smaller area where the problem may be. As I said, this is a fundamental technique of debugging.

Colin

Hi

we need to declare in model

accepts_nested_attributes_for :clientes, allow_destroy: true

 in your model and we should declare wrong think

  <%= f.fields_for :cliente  do |cliente_builder| %>

  not a client, we have has_nany relation then we need declare clients

 and your controller need build address object such as

 @reserva = Reserva.new
 1.times{@reserva.clients.builds}

  We should declare worng
  cliente = @reserva.build_cliente

  actualy this is uesd for has_one relation