Переопределение помощников 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.

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