アプリ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
スレッドでの推奨により、 show メソッドだけに glob param を使用して、それが機能することを確認してみました。
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
パスにアクセスしようとすると、ページが開きます。
どうすれば修正できますか?