Rails初心者はこちら
管理者ユーザーが自分自身を削除できないようにするコールバックを実装したユーザー リソースがあります。
before_filter :admin_no_delete, only: :destroy
def admin_no_delete
admin_id = current_user.id if current_user.admin?
redirect_to root_path if params[:id] == admin_id
end
これがよく知られているように見える場合は、Michael Hartl の rails チュートリアルの演習 #10 からのものですが、彼が提案したのとは異なり、別の方法で実行しようとしました。
これに対する私の(不十分な)テストは失敗します
describe "deleting herself should not be permitted" do
before do
delete user_path(admin)
end
it { should_not redirect_to(users_path) }
end
しかし、管理者ユーザーがテストするためだけに削除リンクを公開してそのリンクをクリックすると、コールバックが実際に実行に成功したように見えます (root_path へのリダイレクト)。
jQuery を使用して destroy アクションを呼び出し、コールバックによって保護されているレコードを削除することができました (Web Inspector の JavaScript コンソールを使用)。
$.ajax({url: 'http://localhost:3000/users/104', type: 'DELETE', success: function(result){alert(result)} })
この状況で DELETE HTTP リクエストが成功しないようにする方法についてのアイデアを探しています..また、この種の状況を適切にテストする方法についてのアイデアはありますか?
ありがとう。