0

我在Rails中有一个Model(Show),它是通过子域而不是标准REST URL访问的。在文件app/helpers/url_helper.rb我有以下方法:在Rails中覆盖URL助手

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周围松散的基础。

+0

这可能有帮助... http://stackoverflow.com/questions/4160417/how-to-import-rails-helpers-in-to-the-functional-tests –

+0

我没有从这个问题得到很多。我的问题不在于测试URL助手(我对它的测试工作正常),而是特别指出,在集成测试(但是由Rails生成的默认版本)中不存在助手方法。 – RedBassett

+0

啊,好的......也许这个问题适合你吗? http://stackoverflow.com/questions/6721952/rails-helpers-not-working-in-test-environment – jemminger

回答

1

尝试定义没有默认的“秀”行动的路线:

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

听起来有点令人困惑,因为你的模式被称为Show,但它在做什么是定义所有标准的REST风格的路线(指数,新,创建,编辑,更新,删除)除了“显示”,例如

或者另一种方式:

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

是的,名称有点混乱,但我明白了。让我试试看! – RedBassett

+0

所以,事实证明,我根本不使用'resources'方法。我已经手动定义了'show'和'edit'路线。查看新代码的初始问题。 – RedBassett

+1

啊,好的...也许这个问题适合你吗? http://stackoverflow.com/questions/6721952/rails-helpers-not-working-in-test-environment – jemminger

0

我真的会考虑做一些重构和重新命名的显示模式。

+0

怎么回事?由于行动的共同名称?你能提供更多信息吗?这可能比答案更适合作为评论。 – RedBassett