2009-06-13 3 views
0

소규모 호텔의 예약 관리를 돕기 위해 레일 애플리케이션을 제작하는 과정에서 이상한 애플리케이션이 발생합니다. 예약은 잘 작동합니다. 손님을 추가하고 문제없이 객실 등에 할당 할 수 있습니다. 그러나, 상인이 문의를 '확인'하기 위해 갈 때, 잡종은 나를 말리려고 걸어 붙인다.레일스 애플리케이션 진단을위한 요소 업데이트 중단

예약에 대한 인덱스 페이지는 현재의 질의를 나열하고 예약 확인 : 예약 부분 자체

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

내 경로에 PUT에 매핑 된 예약을 확인하는 컨트롤러 액션은 다음과 같습니다

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'는 트릭입니다. 확실한 응용 프로그램은 항상 매달립니다.

누군가가 나를 어떻게 이해할 수 있습니까?

/UPDATE : 나는 다른 방법으로 문제를 입증 할 수 있었다 콘솔 장난에서

: 콘솔뿐만 아니라 잠겨 있음을

?> r = Reservation.find(36) 
=> #<Reservation id: 36, customer_name: "buyer", customer_email: "[email protected]", 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: "[email protected]", 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/belongs_to 물건을 거꾸로 얻었습니다.

감사합니다.

+1

문제는 해결 될 것 같습니다 (그리고 답은 질문에서 인라인입니다) ... 실제로 문제가 있음을 입증 할 수있는 충분한 정보가 게시물에있는 것처럼 보이지 않으므로 다른 독자에게는 유용하지 않을 수 있습니다. –

답변

0

잡종 대신 thin을 사용하십시오. 로그에서 자세한 내용을 게시하십시오. 평소처럼 매달리는 것이 아닙니다.

+0

아직 얇은 것은 아니지만 로그에는 다음과 같은 내용이 나와 있습니다. 확인 예약 36 ... 발견 예약! 확인 중 ... 확인 중, 저장 중 ... 그리고 나서 0 %에서 브라우저의 상태 표시 줄이 멈 춥니 다.puts 문이 없으면 로그는 예약/색인 렌더링에 대한 정보를 표시 한 후 중지됩니다. –

1

귀하의 문제는이 될 수 있습니다

@reservation[:confirmed] = true 

직접 조금 이상한 속성 해시를 업데이트하고 있습니다. 일반적으로 속성을 업데이트하면됩니다.

@reservation.confirmed = true 

속성 해시를 엉망으로 만들 때 이전에 이상한 문제가있었습니다. 부울은 특히 - 아마도 몇 가지 유형 강제 변환이 일어나기 때문일 수 있습니다.

+0

고마워요,하지만 불행히도 이것은 그렇지 않았습니다 ... –

관련 문제