[AWDwR 4]13章エラーprotect_against_forgery

2305 ワード

13.2,Iteration H 2:Integration Testing of Applications,テストを書き終えてrake testを実行中にエラー:
  1) Error:

test_order_shipped(NotifierTest):

ActionView::Template::Error: undefined method `protect_against_forgery?' for #<#<Class:0x00000004bcbca0>:0x00000004d43c40>

    /usr/local/rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/action_view/helpers/url_helper.rb:340:in `button_to'    

ヒントを見てください.line_item.html.Erbのbutton_toエラーが発生しました.変数lineだと思っていました.itemは空でloggerを利用する.info(「line_item:#{line_item.inspect}」)がログに印刷され、値が見つかり、空ではありません.この問題を検索するとこの場所が表示され、button_toが行けばいい、考え方は12章プレイタイムの2番目の問題と同じで、@order.を通じてnilはこのボタンを表示する必要があるかどうかを区別します.このボタンは前の章のPlay timeに追加されています.app/views/lineの変更items/_line_item.html.Erbは以下の通りである.
<% if @order.nil? %>

        <td><%= button_to "Decrease", line_item, :remote => true, :method => :delete, :confirm => "Are you sure?"

%></td>

        <% end %>


これでテストは終わりましたが、気分が悪くなりました.なぜこの間違いが起こったのか分からなかったからです.その後、この投稿を見て、RailsプログラムはCSRF/XSSの攻撃を防ぐためにform_を使用していると答えた.forとform_tagがformsを作成するとtoken order_が追加されますshipped.html.Erbテンプレートはrender(line_item)を呼び出し、_line_item.html.Erbテンプレートにbutton_が使用されていますto、この関数はform要素を作成します.これはemailでは正常に動作せず、mailerクラスでは正常に処理できません.このシリーズのディレクトリに戻る