У нас странная проблема. В контроллере приложения у нас есть набор before_filter
, который требует аутентификации с использованием devise
и перенаправляет при необходимости на страницу входа.
В нашем контроллере библиотеки мы пропускаем это before_filter
.
skip_before_filter :authenticate_user!, :only => :show
Когда мы запускаем простой функциональный тест с capybara
и rspec
, тест завершается неудачей.
it "should get only english articles within the category 'computers'" do
visit '/en/library/computers'
page.should have_content('computers')
end
Похоже, этот фильтр не пропущен. Содержание страницы относится к странице входа.
Когда мы запускаем это с rails server
, оно отлично работает.
Есть идеи, почему он так себя ведет или что искать, чтобы решить эту проблему?
UPDATE:
Возможно, стоит добавить, что это происходит только в Linux. Под MacOS 10.7 с «такой же» настройкой все работает нормально.
Код контроллера:
class Library::CategoriesController < ApplicationController
skip_before_filter :authenticate_user!, :only => [:show]
# GET /categories/1
# GET /categories/1.json
def show
@categories = Category.all
@category = Category.find(params[:id])
@articles = @category.articles.where(:locale => I18n.locale)
respond_to do |format|
format.html # show.html.erb
end
end
end
Application_controller выглядит так (без set_i18n_locale_from_url):
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_i18n_locale_from_url, :authenticate_user!
end
Маршруты:
namespace :library do
get '/' => 'library#index', :as => 'library'
resources :categories, :path => '', :only => [:show]
resources :categories, :path => '', :only => [] do
resources :articles, :path => '', :only => [:show]
end
end