リファイナリーを使用してサイトを開発しています。製油所のバックエンドで作成される 1 つの特定のページについて、独自のコントローラーとビューを使用したいと考えています。ユーザーがこのページでできることは、メニュー位置、タイトル、メタ情報などを設定することだけです。このページの URL は、他のすべてのページと同じに見える必要があります。
たとえば、メニュー構造は次のようになります。
- メニュークス
- メニュー1
- メニュー2
- 特定のページ
- メニュー2
- メニュークス
また、「特定のページ」の URL は「locale/menu1/menu2/specific page」のようになります。
このサイトは複数の言語で利用できるため、すべての言語に対してこれらのルートを作成する必要があります。
現在、私は次のようなルートを作成しています:
specific_page_id = 1
Refinery::I18n.frontend_locales.each do |lang|
slugs = []
page = Refinery::Page.find_by_path_or_id(nil, specific_page_id)
# get slug for page in current language
slugs << page.translations.select { |p| p.locale == lang }.first.slug
# get all slugs from parrent pages
while !page.parent_id.blank?
page = Refinery::Page.find_by_path_or_id(nil, page.parent_id)
slugs << page.translations.select { |p| p.locale == lang }.first.slug
end
match "/:locale/#{slugs.reverse.join("/")}" => "controller#action", :via => :get, :constraints => { :locale => /#{lang}/ }
end
これにより、上記のようにすべての言語で指定されたページへのルートを取得しています。
しかし、問題は、ユーザーがページの名前またはメニュー内の位置を変更したときに、ルートを再度生成する必要があることです。これはあまり頻繁には行われません。
今私の質問は、実行時にこれをより動的に行うにはどうすればよいですか? 制約について少し読んだことがありますが、これが必要かどうかはわかりません。
ご協力いただきありがとうございます!