2011-12-29 21 views
1

2つのモデルcustomerとcomm_logを持つ。それらの関連は以下の通りです:rails 3.1のlink_toで削除ルートを作成する方法は?

resources :customers do 
    comm_logs 
end 

comm_logsコントローラの破壊のrspecコードはエラーなしで渡されました。ラムダブロックは、削除が成功した後に通信ログの数が1減らされたことを確認しました。コントローラー内のすべてが正しいようです。

すくいルートの出力は次のようになります。実際に

 new_customer_comm_log GET /customers/:customer_id/comm_logs/new(.:format)     {:action=>"new", :controller=>"comm_logs"} 
     edit_customer_comm_log GET /customers/:customer_id/comm_logs/:id/edit(.:format)   {:action=>"edit", :controller=>"comm_logs"} 
      customer_comm_log GET /customers/:customer_id/comm_logs/:id(.:format)     {:action=>"show", :controller=>"comm_logs"} 
          PUT /customers/:customer_id/comm_logs/:id(.:format)     {:action=>"update", :controller=>"comm_logs"} 
          DELETE /customers/:customer_id/comm_logs/:id(.:format)     {:action=>"destroy", :controller=>"comm_logs"} 

、レコードが削除ボタンをクリックした後に削除されませんでしたし、それがコントローラ(ショーのページにあるように、ページは前のページにリダイレクトされませんでした削除した後はどこにでもリダイレクトされませんでした)。削除操作が正しいパスにルーティングされたようです。問題は、ビューで以下のlink_toで最も可能性が高いです。

<%= link_to 'delete', customer_comm_log_path(@customer, @comm_log), :method => :delete, :confirm => "are you sure?", :remote => true %> 

は、上記のlink_toで何か問題はありますか?ありがとう。

+0

コントローラを破棄する方法を投稿できますか? – andrewpthorp

答えて

1

紛失している可能性があることがいくつかあります。あなたの質問にあなたが指定しなかったので、私はあなたがjQueryを使用していると仮定しています。

A)あなたはjQueryの

Bがインストールされていることを確認してください)あなたがRailsのUJS(控えめなJavascriptの)アダプタを手動でインストールまたは宝石を使用していることを確認します(Railsの3.1のための命令は、このリンク上にもあります)。 https://github.com/rails/jquery-ujs

C)あなたのlink_toニーズをだから、リンクのクリックをキャプチャし、AJAX

<%= link_to 'delete', customer_comm_log_path(@customer, @comm_log), :remote => true, :method => :delete) %> 

経由DELETE要求を提出しなければならないのRails UJSアダプタを伝えるために上記link_toに、あなたは:remote => true

Railsはそのリンク上でのユーザーのクリックをキャプチャし、それがリモートDELETE要求であるRailsのサーバーに伝えるためにカップルのparamsを含み、サーバーへのjQuery $.ajaxコールをキックオフします欠落していました。

d)ユーザがリモートリンクをクリックしてコントローラをリダイレクトする場合は、ApplicationControllerにこのコードを挿入することで、AJAXリダイレクトを適切に処理するようにRailsに指示する必要があります。これをしないと、リンクはレコードを削除しますが、リダイレクトは行われません。

# Allows redirecting for AJAX calls as well as normal calls 
    def redirect_to(options = {}, response_status = {}) 
    if request.xhr? 
     render(:update) {|page| page.redirect_to(options)} 
    else 
     super(options, response_status) 
    end 
    end 
+0

私はレール3.1.0を実行しています、jqueryがインストールされているようです。 Gemfileには「jquery-rail」という宝石がありました。 application.jsには、jqueryが必要で、jquery.uiが必要です。 jquery.ujsが追加されました。 application_controller.rbにリダイレクトするajaxのポストにdefコードを追加しました。それ以外にも:remote => true、link = toにtrue => trueが追加されました。削除をクリックすると確認が表示されません。リダイレクトもありません。レコードはまだそこにあります。 – user938363

+0

サーバのログは何を表していますか(つまり、サーバに要求された要求)ですか?また、ブラウザのコンソールでjavascriptエラーを確認してください。 JSエラーがある場合、 '$ .ajax'呼び出しは実行されません。 – iwasrobbed

+0

new.js.erbファイルを作成した後、lease_logsコントローラにhtmlとjsの両方の形式でrespond_toを追加すると、上記のajax destroyが機能し始めました。 new.js.erbには、$( "<%= escape_javascript render(:file => 'lease_logs/new.html.erb')%>」という2行があります。insertAfter( '#new_log_link'); $( '#new_log_link')。hide(); – user938363

関連する問題