我在我的应用程序to_param
中使用创建自定义 URL(此自定义路径包含斜杠):
class Machine < ActiveRecord::Base
def to_param
MachinePrettyPath.show_path(self, cut_model_text: true)
end
end
问题是,由于Rails 4.1.2
行为发生了变化并且 Rails 不允许在 URL 中使用斜杠(当使用自定义 URL 时),所以它转义了斜杠。
我有这样的路线:
Rails.application.routes.draw do
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
resources :machines, except: :destroy do
collection do
get :search
get 'search/:ad_type(/:machine_type(/:machine_subtype(/:brand)))', action: 'search', as: :pretty_search
get ':subcategory/:brand(/:model)/:id', action: 'show', as: :pretty
patch ':subcategory/:brand(/:model)/:id', action: 'update' # To be able to update machines with new rich paths.
end
end
end
end
我根据线程中的建议尝试将 glob 参数仅用于 show 方法以确保其有效:
resources :machines, except: :destroy do
#...
end
scope format: false do
get '/machines/*id', to: "machines#show"
end
但这绝对行不通。我仍然有这样的断开链接:
http://localhost:3000/machines/tractor%2Fminitractor%2Fmodel1%2F405
当然,如果我自己替换转义斜线:
http://localhost:3000/machines/tractor/minitractor/model1/405
并尝试访问路径,然后页面将被打开。
任何想法我该如何解决?