NAR*_*KOZ 5 ruby-on-rails spree rails-engines
使用 Rails 3.2.13 和 spree 2.0.2
我遇到了与动态范围下的 Rails 可安装引擎类似的问题
我的路线:
scope ':locale', locale: /en|jp/ do
mount Spree::Core::Engine, at: '/store'
root to: 'home#index'
end
Run Code Online (Sandbox Code Playgroud)
我想输出链接以更改区域设置:
<%= link_to 'JP', url_for(locale: :jp) %>
Run Code Online (Sandbox Code Playgroud)
但这输出:
<a href="/en/store/?locale=jp">JP</a>
Run Code Online (Sandbox Code Playgroud)
而不是预期的:
<a href="/jp/store">JP</a>
Run Code Online (Sandbox Code Playgroud)
- 编辑 -
当我输入ApplicationController:
def default_url_options(options={})
{ locale: I18n.locale }
end
Run Code Online (Sandbox Code Playgroud)
它在存储中设置区域设置参数两次,而不是合并它们:
http://localhost:3000/en/store/products/bag?locale=en
Run Code Online (Sandbox Code Playgroud)
面临完全相同的问题,我已经找到了解决方案......
这是我的 application_controller-File (我的引擎继承自该文件(这是 Main Apps 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
Run Code Online (Sandbox Code Playgroud)
请注意,url_options-code 位于受保护部分之外。它必须是公开的。
在这里找到解决方案的提示: default_url_options和rails 3
希望能帮助到你
问候
菲利普
| 归档时间: |
|
| 查看次数: |
2158 次 |
| 最近记录: |