如何缩短rails中的url helper

时间:2017-11-26 19:37:18

标签: ruby-on-rails

这方面有很多SO问题,但没有一个能够回答我的想法。如果我错了,请告诉我。

我的路线档案中有以下路线

namespace :integrations do
  resources :google, only: [] do
    collection do
      get 'prompt'
      get 'callback'
    end
  end
end

这些会创建非常长的url助手,如下所示。

prompt_integrations_google_index GET        /integrations/google/prompt(.:format)            integrations/google#prompt
callback_integrations_google_index GET        /integrations/google/callback(.:format)          integrations/google#callback

我已尝试使用as,但这并不起作用。我不知道使用path是否正确。如何缩短他们的帮助名称?

例: google_prompt_integrations_google_index -> google_prompt

我想只对一条选定路线进行重命名,并保持所有其他路线不变。

2 个答案:

答案 0 :(得分:0)

您是否尝试过as

 namespace :integrations, as: '' do
     resource :google, only: [:prompt, :callback] do
       collection do
         get 'prompt', as: 'prompt'
         get 'callback', as: 'cb'
       end
     end
   end

在佣金路线上,我们得到prompt_googlecb_google

#rake routes

prompt_google GET    /integrations/google/prompt(.:format)   integrations/googles#prompt
cb_google GET    /integrations/google/callback(.:format) integrations/googles#callback

更新

如果您想改变1路线,为什么不能使用

get 'integrations/google/prompt', to: 'integrations/google#prompt', as: 'google_prompt'

rake路线将返回

 google_prompt GET    /integrations/google/prompt(.:format)   integrations/google#prompt

答案 1 :(得分:0)

您可以将路线定义写为:

namespace :integrations, as: '' do
  resource :google, only: [] do
    collection do
      get 'prompt'
      get 'callback'
    end
  end
end

然后添加以下变形以使用帮助程序删除_index_index来自此implementation

# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.plural /^(google)$/i, '\1s'
  inflect.singular /^(google)s/i, '\1'
end

现在你可以随心所欲:

$ rails routes | grep google
        prompt_google GET    /integrations/google/prompt(.:format)          integrations/googles#prompt
      callback_google GET    /integrations/google/callback(.:format)        integrations/googles#callback