2017-08-24 4 views
0

J'ai deux modèles - Post et Page et leurs deux ont un chemin commençant à partir de la première barre oblique. Par exemple:Friendly_id et deux slug commencent à partir de la racine

  1. domain.com/first-slug - il est post
  2. domain.com/second-slug - c'est la page

Je peux créer le contrôleur, comme ContentController et slug processus comme celui-ci:

class ContentsController < ApplicationController 
    def show 
    @page = Page.find_by(slug: params[:id]) 
    @post = Post.find(params[:id]) unless @page 
    end 
end 

mais j'ai un problème avec des pierres précieuses, qui utilisent la méthode nom_contrôleur pour d Classe de modèle efine.

Deuxième solution, quand j'utilise PageController et PostController et routes comme:

get '/*id', to: 'pages#show', as: :page 
get '/*id', to: 'posts#show', as: :post 

un cycle infini se produit bien sûr

Existe-t-il d'autres moyens de résoudre cette approche non standard?

Répondre

0

Bien sûr, je dois utiliser des contraintes dans les chemins. Par exemple:

get '/*id', to: 'posts#show', as: :post, constraints: { id: /\d{4}\/\d{2}\/\d{2}\/\w.+/ } 
get '/*id', to: 'pages#show', as: :page