在Rails

时间:2015-06-11 20:36:46

标签: ruby-on-rails ruby ruby-on-rails-4 integration-testing url-helper

我在Rails中有一个模型(Show),可以通过子域而不是标准REST URL访问。在文件app/helpers/url_helper.rb中,我有以下方法:

def show_url(show)
  root_url(subdomain: show.subdomain)
end

在控制器中,这非常有效。我可以使用puts show_url(@show)对其进行测试,并按预期输出节目的subdomainhttp://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 on subdomain matching。{/ p>

2 个答案:

答案 0 :(得分:1)

尝试在没有默认“show”操作的情况下定义其路线:

# config/routes.rb
resources :show, except: :show

由于您的模型被称为Show,所以听起来有点混乱,但它正在做的是定义除“show”之外的所有标准的restful路由(索引,新建,创建,编辑,更新,删除),例如< / p>

或另一种方式:

resources :show, only: %w(index new create edit update delete)

答案 1 :(得分:0)

我真的会考虑做一些重构并重命名Show模型。