문제

소규모 호텔이 예약을 관리하는 데 도움이되는 Rails 응용 프로그램을 구축하는 과정에서 이상한 응용 프로그램이 중단되고 있습니다. 예약 구축은 잘 작동합니다. 손님을 추가하고 문제없이 방에 할당합니다. 그러나 상인이 문의를 '확인'으로 가면 Mongrel은 나를 마르려고합니다.

예약의 색인 페이지에는 현재 문의 및 확인 된 예약이 나와 있습니다.

# 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 %>

예약 부분 자체에서 확인/확인 논리를 호출하는 비트는 단순히 컨트롤러 동작에 대한 직접 링크입니다.

# _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 %>)

내 경로에 풋에 매핑되는 예약을 확인하기위한 컨트롤러 조치는 다음과 같습니다.

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'는 트릭입니다. 명확한 앱은 매번 매달립니다.

누군가 내가 여기서 무슨 일이 일어나고 있는지 이해하도록 도와 줄 수 있습니까?

/업데이트:

콘솔을 가지고 놀면서 다른 방식으로 문제를 보여줄 수있었습니다.

?> 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>>

콘솔도 잠겨 있었고 저장을 중단해야했습니다! ctrl-c를 사용하는 명령.

왜 세상에서 저축 할 것인가! 이것을하고 있습니까?

/업데이트:

알았어요!!! 내 모델에있었습니다. 나는 협회를 검증하려고 노력했고 나는 has_many/selds_to 물건을 거꾸로 얻었습니다.

모두 감사합니다!

도움이 되었습니까?

해결책

사용 얇은 Mongrel 대신. 로그에서 자세한 내용을 게시하십시오. 그것은 보통 그렇게 매달리지 않습니다.

다른 팁

귀하의 문제는 다음과 같습니다.

@reservation[:confirmed] = true

속성 해시를 직접 업데이트하고 있습니다. 일반적으로 속성을 업데이트합니다.

@reservation.confirmed = true

속성 해시를 엉망으로 만들기 전에 이상한 문제가있었습니다. 부울 - 특히 유형의 강요가 발생하기 때문일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top