use_doorkeeper在范围路径中使用时会导致问题

时间:2013-08-27 15:30:00

标签: ruby-on-rails ruby ruby-on-rails-3 oauth doorkeeper

我正在将门卫升级到6.7,我遇到use_doorkeeper问题:

我跟着migration instructions并执行了以下操作:

升级前的路线:

  scope "(:locale)", :locale => /.{2}/ do
    ...
    mount Doorkeeper::Engine => '/oauth', as: 'doorkeeper'
    ...
  end

升级后的路线:

  scope "(:locale)", :locale => /.{2}/ do
    ...
    use_doorkeeper
    ...
  end

现在我在视图中从这一行(和其他人)收到错误:

<td><%= link_to application.name, [:oauth, application] %></td>

路由错误

没有路线匹配{:action =&gt;“show”,:controller =&gt;“doorkeeper / applications”,:locale =&gt;#&lt;门卫::应用程序ID:5,名称:“我的应用程序”,uid:“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...”,秘密:“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...”,redirect_uri:“http://www.myapp.com”,created_at:“2013-08- 26 14:33:38“,updated_at:”2013-08-26 14:33:38“&gt;}

看门人应用程序似乎进入了语言环境参数。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

如果您已按照rails guides进行操作,则ApplicationController中会显示以下内容。

before_action :set_locale

def set_locale
  I18n.locale = params[:locale] || I18n.default_locale
end

def default_url_options(options={})
  { locale: I18n.locale }
end

但是您的门卫控制器不会继承您的ApplicationController。所以,如果我是你,我会把它解决问题

module LocaleConcern
  extend ActiveSupport::Concern

  included do
    before_action :set_locale
  end

  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end

  def default_url_options(options={})
    { locale: I18n.locale }
  end

end

然后,您可以按照正常方式在include ApplicationControllerconfig.to_prepare do Doorkeeper::ApplicationController.send :include, LocaleConcern end 这样做。要将它添加到门卫,有很多选项,但你可以做的一件事是将以下内容添加到config / application.rb

{{1}}