4

我在application.rb中如何在不使用Rails 4的情況下將trailing_slash添加到所有url?

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

嘗試添加這個問題,以及在routes.rb中

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

:trailing_slash => true但無論似乎工作。我通過軌道4.0文檔搜索,但無法找到相關信息。我在這裏錯過了什麼?

更新:

我試着在filter_parameter_logging.rb加入

Rails.application.default_url_options[:trailing_slash] = true 

,因爲這是在整個項目中,我能找到Rails.application.*唯一的地方,但它不工作要麼。我找到了行here among the releases,我正在使用4.0.4。我是否在錯誤的地方添加了這個?我在重新檢查前重新啓動了服務器。

對於簡單的問題抱歉,但從我收集的不是trailing_slash應該反映在瀏覽器網址以及主要?因爲這是我需要的,去與歷史js。

+0

你談論你的應用程序生成的網址嗎? – phoet

+0

@phoet是的,我該如何讓所有'download'自動重定向到'download /'? – Luxiyalu

+0

我想你會想在網絡服務器級別做到這一點,你使用nginx嗎? – complistic

回答

7

我想你的意思是:trailing_slash => true錯了。

它所做的只是將/添加到您的路徑助手的末尾。不涉及重定向。

您的路線仍會響應,無論是否帶有斜線。

如果你想使用nginx的HTTP服務器,你會做這樣的事情對所有非trailing_slash的URI像/download重定向到/download/

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

你仍然要添加:trailing_slash => true到你的路由讓你的路徑/ URL助手生成正確的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是否不應該在瀏覽器地址欄中添加斜線?這是我首先需要的,因爲我需要使用historyj來檢測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,不知道軌道4。

欲瞭解更多詳情,請參閱此SO

+0

Works in Rails 4 – Elvn

0

您可以將此行添加到config/application.rb

config.action_controller.default_url_options = { trailing_slash: true } 

如果你這樣做,當你調用一個控制器或輔助裏面一個Rails路徑幫手,生成的路徑將有/末:

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 
相關問題