Переопределение помощников URL в Rails
У меня есть модель (Show
) в Rails, доступ к которому осуществляется через поддомен, а не через стандартный REST URL. В файле app/helpers/url_helper.rb
У меня есть следующий метод:
def show_url(show)
root_url(subdomain: show.subdomain)
end
В контроллерах это работает отлично. Я могу проверить это с puts show_url(@show)
и выводит subdomain
шоу, как и ожидалось: http://test.example.com
, Однако в интеграционных тестах метод не работает, и вместо него используется метод по умолчанию, сгенерированный rails. Если я бегу puts show_url(@show)
там я просто получаю http://example.com
, Как использовать этот пользовательский помощник по URL в моих интеграционных тестах?
Редактировать:
routes.rb
раздел об этом субдомене:
constraints(lambda do |request|
request.subdomain.present? && request.subdomain != 'www'
end) do
get '/' => 'shows#show', as: :show
get '/edit' => 'shows#edit', as: :edit_show
end
Это свободно основано на Railscast на сопоставлении поддоменов.
2 ответа
Попробуйте определить его маршрут без действия по умолчанию "show":
# config/routes.rb
resources :show, except: :show
Звучит немного запутанно, так как ваша модель называется Show
, но то, что он делает, это определение всех стандартных маршрутов restful (индекс, новый, создание, редактирование, обновление, удаление), кроме "show", например
Или другим способом:
resources :show, only: %w(index new create edit update delete)
Я бы действительно подумал о рефакторинге и переименовании модели Show.