Здравствуйте.
Может кто-то сталкивался. Когда я в браузере нажимаю на линк удалить любой ресурс, например категорию, меня разлогинивает и редиректит на страницу входа. И cancan и devise (в зависимости как я проверяю в контроллере). Остальные акшены работают.
В коде имеется следующее:
app/models/ability.rb class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.has_role? :admin
can :manage, :all
end
end
end
app/controllers/admin/categories_controller.rbclass Admin::CategoriesController < ApplicationController
layout "admin"
# метод cancan
load_and_authorize_resource
# в другом контроллере вместо load_and_authorize_resource используется devise'овский метод:
before_filter :authenticate_user! # для эксперимента
# ...
# весь код после скаффолда даже не изменялся
# ...
# DELETE /admin/categories/1
# DELETE /admin/categories/1.json
def destroy
@category = Category.find(params[:id])
@category.destroy
respond_to do |format|
format.html { redirect_to admin_categories_url }
format.json { head :no_content }
end
end
app/models/category.rbclass Category < ActiveRecord::Base
has_many :subcategories, class_name: "Category"
belongs_to :parent_category, class_name: "Category", foreign_key: "category_id"
attr_accessible :name, :description, :category_id, :order
validates_presence_of :name
before_create :set_max_order
after_initialize :set_max_order, :if => Proc.new { |c| self.order < 1 }
private
def set_max_order
self.order = max_order + 1
end
def max_order
Category.maximum(:order) || 0
end
end
app/views/admin/categories/index.html.erb<% @categories.each do |category| %>
# ....
<% if can? :destroy, category %>
<td><%= link_to 'Delete', category, confirm: 'Are you sure?', method: :delete %></td>
<% end %>
<% end %>
Вроде все должно работать. И даже можно сказать работает — проходит следующие тесты:
it "should delete category" do
visit admin_categories_path
expect { click_link "Delete" }.to change(Category, :count).by(-1)
end
it "should definately delete category" do
visit admin_categories_path
page.should have_selector('table.data tbody tr', :count => 1)
click_link "Delete"
page.should_not have_selector('table.data tbody tr')
page.should have_content('Categories')
end
На вкладке network вижу
Request URL: /admin/categories/5
Request Method: POST
Status Code: 302 Found
но даже в чистейшем браузере на другом компьютере происходит тоже самое.
Если отключить все проверки, то запись удаляет, но все равно разлогинивает.