0

Ruby on Rails アプリケーションに関連して、かなり長い間頭を悩ませている問題があります。3 つの異なる環境でまったく同じワークフローをテストしましたが、どの環境でも「破棄」リンクを機能させることができませんでした。

このセットアップの使用:

  • RVM 1.17.4
  • ルビー 1.9.3p327
  • レール 3.2.9

次に、文字通り、これらのコマンドを実行しました。

$ rails new foo
$ cd foo/
$ rails g scaffold bar title:string
$ rake db:migrate

このコントローラーを生成しました:

  # DELETE /bars/1
  # DELETE /bars/1.json
  def destroy
    @bar = Bar.find(params[:id])
    @bar.destroy

    respond_to do |format|
      format.html { redirect_to bars_url }
      format.json { head :no_content }
    end
  end

これは、ビューの破棄行です。

<%= link_to 'Destroy', bar, method: :delete, data: { confirm: 'Are you sure?' } %>

最終ページのコードは次のとおりです。

<a href="/bars/1" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a>

レイアウトには次のものがあります。

  <%= stylesheet_link_tag    "application", :media => "all" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>

そして、application.js には次のものがあります。

//= require jquery
//= require jquery_ujs
//= require_tree .

これらは、html 出力の行です。

<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/bars.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>

ルートは次のとおりです。

    bars GET    /bars(.:format)          bars#index
         POST   /bars(.:format)          bars#create
 new_bar GET    /bars/new(.:format)      bars#new
edit_bar GET    /bars/:id/edit(.:format) bars#edit
     bar GET    /bars/:id(.:format)      bars#show
         PUT    /bars/:id(.:format)      bars#update
         DELETE /bars/:id(.:format)      bars#destroy

同じ結果になった人いますか?うまくいかないのはなぜですか?

私がインターネットで見つけた回避策は、javascript が適切にロードされていないことを示唆しており、時にはアクションを DELETE から GET に変更するよう提案されています。ボタンのリンクを変更することを提案する人もいます。とにかく、確認は表示されず、すべてのビューですべての破棄アクションを書き直すのは本当に面倒です。

4

2 に答える 2

1

html を考えると、問題はないはずです。したがって、これはサーバー側の問題ではなく、クライアント側の問題である可能性があります。

あなたが言ったように...

インターネットで見つけた回避策は、javascript が正しく読み込まれていないことを示唆しています...

  1. おそらく、JavaScript をサポートしていないブラウザーを使用しているか、JavaScript を無効にしている可能性があります。

    どのブラウザでこれをテストしましたか? Firefox を試して、 [オプション]ウィンドウで、 [コンテンツ] タブの [ JavaScriptを有効にする] がオンになっていることを確認します。

  2. または、ブラウザで/assets/jquery.js?body=1およびに移動して、javascript フレームワーク ファイルがそこにあることを確認します。/assets/jquery_ujs.js?body=1そうでない場合は、これらをアセット ディレクトリに追加する必要があり、運用環境で実行している場合は実行する必要がある場合があります。rake assets:precompile

于 2012-12-29T22:41:04.277 に答える
0

JavaScriptが有効になっていて、破棄アクションが機能する必要があるが、リンクが正しいHTTP_METHOD = DELETEを送信せず、ルート設定が正しい場合は、DOCTYPEを変更してみてください

<!DOCTYPE html>
于 2012-12-29T21:26:34.780 に答える