4

Я пытался добавить это в application.rbКак добавить trailing_slash ко всем URL-адресам без Rails 4?

config.action_controller.default_url_options = { :trailing_slash => true } 

, а также с :trailing_slash => true в routes.rb

match '/download', to: 'welcome#download', via: 'get', :trailing_slash => true 

Но ни, кажется, работает. Я искал рельсы 4.0 doc, но не смог найти соответствующую информацию. Что мне здесь не хватает?

Update:

Я попытался добавить

Rails.application.default_url_options[:trailing_slash] = true 

в filter_parameter_logging.rb, так как это единственное место во всем проекте, где я мог бы найти Rails.application.*, но это не работает либо. Я нашел строку here among the releases, и я использую 4.0.4. Могу ли я добавить это не в том месте? И я повторно перезапустил сервер перед повторной проверкой.

И извините за простой вопрос, но из того, что я собрал, не trailing_slash должен быть отражен в URL-адресе браузера, если не в первую очередь? Потому что это то, что мне нужно, чтобы пойти с историей.

+0

вы говорите о URLs, генерируемых в приложении? – phoet

+0

@phoet да, что мне делать, чтобы все 'download' автоматически перенаправлялись на' download/'? – Luxiyalu

+0

Я думаю, вы хотели бы сделать это на уровне веб-сервера, используете ли вы nginx? – complistic

ответ

7

Я думаю, что вы имеете значение :trailing_slash => true неправильно.

Все, что он делает, это добавить/к концу ваших помощников по пути. Не задействовано перенаправление.

Ваши маршруты по-прежнему будут реагировать как на конечную косую черту, так и без нее.

Если вы хотите перенаправить всех не trailing_slash Ури как /download к /download/ используя сервер Nginx HTTP вы могли бы сделать что-то вроде этого:

rewrite ^([^.\?]*[^/])$ $1/ permanent; 

Вы все еще хотите добавить :trailing_slash => true к вашим маршрутам так что ваши path/url helper генерируют правильные uri (так что пользователю не нужно перенаправлять).

+0

В мире Rails, вопреки PHP, вся прикладная логика хранится внутри приложения, а не конфигурации Apache или nginx. Я не считаю это хорошим решением. – Nowaker

1

Я использую rails 4.0.2 для меня это работает

routes.rb

 get 'admin/update_price_qty' => 'admin#update_price_qty', :trailing_slash => true,:as => "price" 

в консоли: -

 irb(main):003:0* app.price_path 
    => "/admin/update_price_qty/" 

routes.rb

match '/download', to: 'welcome#index', via: 'get', :trailing_slash => true,:as => "welcome_price" 

в консоли: -

`irb(main):002:0> app.welcome_price_path 
    => "/download/"` 

Но я попытался добавить это в application.rb

config.action_controller.default_url_options = { :trailing_slash => true } 

не работает.

+0

Должен ли я видеть результат в irb? Должно ли trailing_slash добавить косую черту в адресную строку браузера? Это то, что мне нужно в первую очередь, так как мне нужно использовать historyjs для обнаружения изменения URL. И я не вижу никаких изменений в ': trailing_slash => true'. – Luxiyalu

2

Trailing_slash относится к / после того, как имя page/ не нравится /page.

Вы неправильно указали свои маршруты.

Изменить его

match 'download/', to: 'welcome#download', via: 'get', :trailing_slash => true 

Существует и другой способ для достижения этой цели, давая trailing_slash => true вариант прямо в link_to помощника.

link_to 'Downloads', downloads_path(:trailing_slash => true) 

Хотя эта работа в Rails 3, не уверен Rails 4.

Подробнее см. Здесь SO.

+0

Работает в Rails 4 – Elvn

0

Вы можете добавить эту строку в config/application.rb:

config.action_controller.default_url_options = { trailing_slash: true } 

Если вы сделаете это, когда вы звоните помощника пути Рельсы внутри контроллера или помощника, созданный путь будет иметь / в конце:

class ApplicationController 
    def index 
    download_path # returns "/download/" 
    end 
end 

module PathHelper 
    def path 
    download_path # returns "/download/" 
    end 
end 

Если вам нужно использовать пути Помощник с внешними контроллерами и помощник, то нужно include Rails.application.routes.url_helpers, но, видимо, это игнорирует конфигурацию trailing_slash выше:

class SomeClass 
    include Rails.application.routes.url_helpers 

    def path 
    download_path # returns "/download" 
    end 
end 

В этом случае, вы должны добавить { trailing_slash: true } в качестве параметра:

class SomeClass 
    include Rails.application.routes.url_helpers 

    def path 
    download_path(trailing_slash: true) # returns "/download/" 
    end 
end