【问题标题】:Overriding URL helpers in Rails在 Rails 中覆盖 URL 助手
【发布时间】:2015-08-27 17:58:19
【问题描述】:

我在 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

【问题讨论】:

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


【解决方案1】:

我真的会考虑对 Show 模型进行一些重构和重命名。

【讨论】:

  • 怎么回事?因为有一个动作的通用名称?你能提供更多信息吗?这可能更适合作为评论而不是答案。
【解决方案2】:

尝试在不使用默认“显示”操作的情况下定义其路线:

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

听起来有点混乱,因为您的模型被称为 Show,但它所做的是定义所有标准的 restful 路由(索引、新建、创建、编辑、更新、删除),除了“显示”,例如

或者其他方式:

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

【讨论】:

  • 是的,名字有点混乱,但我明白了。让我试试看!
  • 所以,事实证明,我根本不使用resources 方法。我手动定义了showedit 路由。有关新代码,请参阅初始问题。
  • 啊,好吧...也许这个问题对你有用? stackoverflow.com/questions/6721952/…
  • 在那里尝试了接受的答案。我必须包含该文件,还是自动加载初始化程序?我刚收到NameError: NameError: Couldn't find UrlHelper, expected it to be defined in helpers/url_helper.rb
  • 您可能希望在已接受答案中的初始化程序中执行此操作:stackoverflow.com/a/6822329/126636
猜你喜欢
  • 1970-01-01
  • 2014-07-02
  • 2014-12-07
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 2014-04-18
  • 2013-02-27
  • 1970-01-01
相关资源
最近更新 更多