Pregunta

En el curso de la construcción de una aplicación de rieles para ayudar a gestionar las reservas de los pequeños hoteles, Estoy encontrando una aplicación extraña colgar. La construcción de la reserva funciona bien; añadir invitados, asignándolos a las habitaciones, etc, sin ningún problema. Sin embargo, cuando el comerciante va a 'confirman' una investigación, mestizo me cuelga a secar.

La página de índice para hacer reservas enumera las investigaciones actuales y las reservas confirmadas:

# reservations/index.html.erb

<% unless @reservations.empty? %>
<h2>Inquiries</h2><hr/><br/>
<%= render :partial => 'reservation', :collection => @reservations.reject { |r| r.confirmed } %>
<h2>Confirmed Reservations</h2><hr/><br/>
<%= render :partial => 'reservation', :collection => @reservations.reject { |r| not r.confirmed }  %>
<% else %>
<%= link_to 'Search for rooms', :action => 'index', :controller => 'search' %>
<% end %>

En la propia reserva parcial, los bits que invocan la lógica confirman / unconfirm son simplemente enlaces directos a controlador de acciones:

# _reservation.html.erb

(<% unless reservation.confirmed? %>
    <%= link_to 'Confirm Reservation', :action => 'confirm', :id => reservation.id %>
<% else %>
    <%= link_to 'Unconfirm Reservation', :action => 'unconfirm', :id => reservation.id %>
<% end %>)

La acción del controlador para confirmar una reserva, que se asigna a un puesto en mi rutas, es el siguiente:

def confirm
  puts "\n\n\nConfirming reservation #{params[:id]}..."
  @reservation = Reservation.find(params[:id])
  puts "Found reservation! Confirming..."
  @reservation[:confirmed] = true
  puts "Confirmed, saving..."
  respond_to do |wants|            
    if @reservation.save
      flash[:notice] = 'Reservation has been confirmed.'
      wants.html { redirect_to :action => 'index' }
    else
      wants.html { render :action => 'index' }
    end
  end    
end

'@ reservation.save' es lo que hace el truco. aplicación definitiva colgar cada vez.

Puede alguien ayudarme a entender exactamente lo que está pasando aquí?

/ ACTUALIZACIÓN:

A partir de jugar con la consola yo era capaz de demostrar la cuestión de otra manera:

?> r = Reservation.find(36)
=> #<Reservation id: 36, customer_name: "buyer", customer_email: "buyer@buy.com", begin: "2009-06-22 00:00:00", end: "2009-06-26 00:00:00", request_timestamp: nil, notes: "Thanks!", created_at: "2009-06-13 20:36:50", updated_at: "2009-06-13 20:36:50", yacht_id: 7, adults: 1, children: 0, buyer_id: 3, confirmed: nil>
>> r.confirmed = true
=> true
>> r
=> #<Reservation id: 36, customer_name: "buyer", customer_email: "buyer@buy.com", begin: "2009-06-22 00:00:00", end: "2009-06-26 00:00:00", request_timestamp: nil, notes: "Thanks!", created_at: "2009-06-13 20:36:50", updated_at: "2009-06-13 20:36:50", yacht_id: 7, adults: 1, children: 0, buyer_id: 3, confirmed: true>
>> r.save!
IRB::Abort: abort then interrupt!!
    from C:/Ruby/lib/ruby/1.8/irb.rb:81:in `irb_abort'
    from C:/Ruby/lib/ruby/1.8/irb.rb:247:in `signal_handle'
    from C:/Ruby/lib/ruby/1.8/irb.rb:66:in `start'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/callbacks.rb:275:in `call'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/callbacks.rb:275:in `run_callbacks'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/callbacks.rb:344:in `callback'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/callbacks.rb:318:in `valid?'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/associations/association_proxy.rb:221:in `send'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/associations/association_proxy.rb:221:in `method_missing'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/validations.rb:906:in `validates_associated'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/validations.rb:906:in `collect'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/validations.rb:906:in `validates_associated'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/validations.rb:399:in `validates_each'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/validations.rb:396:in `each'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/validations.rb:396:in `validates_each'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/callbacks.rb:182:in `call'
 ... 2204 levels...
    from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/callbacks.rb:90:in `run'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/callbacks.rb:90:in `each'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/callbacks.rb:90:in `send'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/callbacks.rb:90:in `run'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/callbacks.rb:276:in `run_callbacks'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/validations.rb:1029:in `valid_without_callbacks?'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/callbacks.rb:315:in `valid?'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/validations.rb:1018:in `save_without_dirty!'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/dirty.rb:87:in `save_without_transactions!'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/transactions.rb:200:in `save!'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/abstract/database_statements.rb:136:in `transaction'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/transactions.rb:182:in `transaction'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/transactions.rb:200:in `save!'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/transactions.rb:208:in `rollback_active_record_state!'
    from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/transactions.rb:200:in `save!'
    from (irb):5>>

Tenga en cuenta que la consola encerrado así, y tuve que abortar el balón! comando usando Ctrl-C.

¿Por qué en el mundo sería el balón! estar haciendo esto?

/ ACTUALIZACIÓN:

Lo tengo !!! Fue en mi modelo. Yo estaba tratando de validar una asociación y que había conseguido la materia has_many / belongs_to hacia atrás.

Gracias a todos!

¿Fue útil?

Solución

delgada en lugar de mestizo. Publicar más detalles de su registro. Esto no sólo se cuelgan como que por lo general.

Otros consejos

Su problema puede ser la siguiente:

@reservation[:confirmed] = true

Esta actualización directamente el hash atributos, que es un poco extraño. Normalmente, usted acaba de actualizar el atributo.

@reservation.confirmed = true

He tenido problemas impares antes, cuando metí la pata con el hash de atributos. Booleanos sobre todo -. Tal vez porque hay algún tipo de coacción sucediendo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top