6

アプリ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

パスにアクセスしようとすると、ページが開きます。

どうすれば修正できますか?

4

3 に答える 3