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 に変更するよう提案されています。ボタンのリンクを変更することを提案する人もいます。とにかく、確認は表示されず、すべてのビューですべての破棄アクションを書き直すのは本当に面倒です。