2009-06-13 16 views
0

小規模ホテルの予約を管理するためのレールアプリケーションを構築する過程で、奇妙なアプリケーションがハングアップしています。予約の構築はうまくいきます。ゲストの追加、部屋への割り当てなど、問題なく。しかし、商人が質問を '確認'するとき、Mongrelは私を乾かして吊るします。Railsアプリケーションの診断で要素更新が発生する

予約のためのインデックスページが現在の問い合わせを示し、予約確認:

:予約部分自体で

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

を、確認/ unconfirmロジックを呼び出すビットは単にアクションをコントローラに直接リンクされています

# _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を使用してください。あなたのログから詳細を投稿してください。それはちょうどそれのようにハングアップしません。

@reservation[:confirmed] = true 

あなたが直接、少し奇妙である属性のハッシュを更新している:

+0

私はまだ薄くしていませんでしたが、ログには、それは状態: 確認予約36 ... 見つかった予約!確認中... 確認済み、保存中... そして、ブラウザのステータスバーは0%でもハングします。そして、puts文がなければ、予約/レンダリングのレンダリングに関する情報を表示した後、ログは単に停止します。 –

1

あなたの問題は、これかもしれません。通常は、属性を更新するだけです。

@reservation.confirmed = true 

私は、属性のハッシュを台無し時に前に奇妙な問題がありました。ブーリアンは特に - おそらく、何らかの型強制が起こっているからかもしれません。

+0

ありがとうございますが、残念ながらこれはそうではありませんでした... –

関連する問題