3

Мои routes.rbbefore_filter set_locale кроме контроллера

MyApp::Application.routes.draw do 
scope '(:locale)' do 
    #all resources here 
end 
namespace :blog do 
    resources :posts, :only => [:index, :show] 
end 
end 

Мои application_controller.rb

class ApplicationController < ActionController::Base 
# 
# 
before_filter :set_locale 

private 

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

def set_locale 
    #code for detect locale here 
end 
# 
# 
end 

Все ресурсы внутри scope '(:locale)' работает нормально.

Однако я не хочу использовать локаль с namespace :blog и когда я пытаюсь нажать на блоге ссылки я могу увидеть этот адрес http://localhost:3000/blog/posts?locale=en

Как я могу удалить локаль из namespace :blog... и blog resource?. Я хочу, чтобы получить URL-адрес что-то вроде http://localhost:3000/blog/posts Я хочу, чтобы удалить ?locale=en

Спасибо!

+0

В вашем 'ApplicationController' есть ли у вас метод, который выглядит примерно так: def url_options; {locale: I18n.locale} .merge (супер); end', который автоматически включал бы «locale» в строку url? –

+0

Это метод, который у меня есть в ApplicationController: 'def default_url_options (options = {}) {locale: I18n.locale} end' Я редактировал вопрос, если проблема в этом методе, я хочу отключить этот метод в моем 'PostsControllers'. Спасибо! – hyperrjas

ответ

1

Используйте skip_before_filter в своих блочных контроллерах?

+0

Я пробовал 'skip_before_filter: set_locale' на моем контроллере сообщений, но получаю тот же результат. Спасибо! – hyperrjas

0

Учитывая то, что вы сказали в комментариях, попробуйте только в том числе locale в вашем default_url_options, если регулятор тока не PostsController, который, мы надеемся избавиться от задней
?locale=en вопроса. Возможно, что-то вроде:

def default_url_options(options = {}) 
    { locale: I18n.locale } unless controller_name == 'posts' 
end 

Или, так как default_url_options is depreciated, если вы хотите использовать url_options, возможно, что-то вроде:

def url_options 
    controller_name == 'posts' ? super : { locale: I18n.locale }.merge(super) 
end 

Ни вышеуказанного испытания, так что я не уверен, что любой из них будет Работа.

Редактировать

Как насчет, если вы установите locale к nil как в this StackOverflow Q&A? Так что может быть что-то вроде:

def url_options 
    locale = controller_name == 'posts' ? nil : I18n.locale 
    { locale: locale }.merge(super) 
end 
+0

Спасибо, но я попробовал оба варианта, и у меня получился тот же результат: (... – hyperrjas

+0

@hyperrjas, см. Править для ответа. Не уверен в этом решении, к сожалению ... –

+0

Спасибо, что последний код Я получаю сообщение об ошибке: «Отсутствует хост для ссылки на ссылку». Укажите параметр: host, установите default_url_options [: host] или установите: only_path в true' Спасибо! – hyperrjas

Смежные вопросы