ruby-on-rails – 为已安装的Rails引擎设置default_url_options
发布时间:2020-12-17 02:04:49 所属栏目:百科 来源:网络整理
导读:使用rails 3.2.13和spree 2.0.2 我遇到了与 Rails mountable engine under a dynamic scope类似的问题 我的路线: scope ':locale',locale: /en|jp/ do mount Spree::Core::Engine,at: '/store' root to: 'home#index'end 我想输出更改区域设置的链接: %= l
使用rails 3.2.13和spree 2.0.2
我遇到了与 Rails mountable engine under a dynamic scope类似的问题 我的路线: scope ':locale',locale: /en|jp/ do mount Spree::Core::Engine,at: '/store' root to: 'home#index' end 我想输出更改区域设置的链接: <%= link_to 'JP',url_for(locale: :jp) %> 但这输出: <a href="/en/store/?locale=jp">JP</a> 而不是预期的: <a href="/jp/store">JP</a> – 编辑 – 当我把它放到ApplicationController时: def default_url_options(options={}) { locale: I18n.locale } end 它在商店中设置语言环境参数两次而不是合并它们: http://localhost:3000/en/store/products/bag?locale=en 解决方法
面对完全相同的问题,我找到了解决方案……
这是我的application_controller-File(我的引擎继承自这个文件(主应用程序ApplicationController,因此我没有代码重复) #!/bin/env ruby # encoding: utf-8 class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs,you may want to use :null_session instead. protect_from_forgery with: :exception before_filter :set_locale_from_params def url_options { locale: I18n.locale } end protected def set_locale_from_params if params[:locale] if I18n.available_locales.include?(params[:locale].to_sym) I18n.locale = params[:locale] else flash.now[:notice] = 'Translation not available' logger.error flash.now[:notice] end end end end 请注意,url_options代码位于受保护部分之外.它必须是公开的. 找到解决方案的tipps: 希望能帮助到你 问候 菲利普 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |