Rails 3: Как проверить область действия роутера?

Я использую Rails 3.0, и у меня есть следующее в моих файлах rout.rb:

scope "/:location" do
  resources :agents
end

Так что я могу сделать это:

agents = Agent.where("location = ?", params[:location])

(Там может быть лучший способ сделать это..? В основном я хочу URL-адреса, такие как: myurl.com/london/agents)

В любом случае, моя проблема с тестами (которые я все еще изучаю), как я могу заставить эту работу работать с областью:

class AgentsControllerTest < ActionController::TestCase
  test "should get index" do
    get 'index'
    assert_response :success
  end
end

Он просто получает маршрут без найденной ошибки.

Любая помощь будет отличной, спасибо.

1 ответ

Решение

Поскольку вы ограничили свои ресурсы, вы фактически не имеете прямого доступа к агентам_контроллера через какие-либо действия. Поэтому вызов get 'index' на самом деле просто пытается получить доступ к /agent. Если вы попробуете это в вашем браузере, это тоже не получится.

Чтобы добиться успеха, вам нужно указать следующий параметр:

get 'index', { :location => 'hawaii' }

Надеюсь, это поможет.

Редактировать: если вам нужен дополнительный доступ к агенту_контроллера (то есть местоположение не обязательно), просто добавьте для него ресурс верхнего уровня в свой файл маршрутов:

resources :agents
Другие вопросы по тегам