2016-10-04 8 views
0

私のアプリには2つのモデルがあります:記事ページです。私はこのように見えるようにしたいと思います。複数のRailsルートからコントローラ名を削除するにはどうすればいいですか?

www.mysite.com/this-is-the-title-of-the-article (articles#show) 
www.mysite.com/about-me (pages#show) 

通常のワードプレスのルートに似ていますが、レールが付いているのは大きな面倒です。私は実用的な解決策を見つけましたが、おそらく改善する可能性があります。ここに私が持っているものがあります。

inside routes.rb;

resources :articles, :pages 
    # this redirects /:id requests to my StaticPagesController 
    match ':id' => 'static_pages#redirect', :via => [:get] 
    resources :articles, :only => [:show], :path => '', as: "articles_show" 
    resources :pages, :only => [:show], :path => '', as: "pages_show" 

インサイドStaticPagesController。

# Basically, it checks if there's a page or article with the given id and renders the corresponding show. Else it shows the 404 
    def redirect 
     @article = Article.where(slug_nl: params[:id]).first || Article.where(slug_en: params[:id]).first 
     @page = Page.where(slug: params[:id]).first 
     if [email protected]? 
      @page = Page.friendly.find(params[:id]) 
      render(:template => 'pages/show') 
     elsif [email protected]? 
      @article = Article.friendly.find(params[:id]) 
      @relatedarticles = Article.where(category: @article.category).uniq.limit(6).where.not(id: @article) 
      render(:template => 'articles/show') 
     else 
      render(:template => 'common/404', :status => 404) 
     end 
     end 

注:私は(friendly_id宝石を使用して)title属性で記事やページのIDをスワップアウトしました。記事は2つの言語にもなっています(したがって、私は両方のスラグをチェックします)

アイデアはありますか?私はすでにこれらのいくつかを試しました。

How to remove controller names from rails routes?

  • http://blog.arkency.com/2014/01/short-urls-for-every-route-in-your-rails-app/
  • しかし、彼らは非常にこれまでのトリックをやっていませんでした。ありがとう:)♥

  • +1

    制約ソリューをどうやっhttp://blog.arkency.com/2014/01/short-urls-for-every-route-in-your-rails-app/に記載されていますか? –

    +0

    エラーは私の側にあった、私は実際にあなたのソリューションを使用して問題を解決することができました! –

    +0

    それを聞いてうれしいです。良い一日を! –

    答えて

    0

    私は解決策を改善しましたが、それでも100%のレールyを感じません。しかし、ここで私は何を得たのですか。

    • /ページタイトル(ページ#ショー)
    • EN /これは、ある-記事(記事#ショー、 ロケールEN)
    • NL/DIT-あるド-titel (記事#ショー、NLロケール)

    注:私は(friendly_id宝石を使用して)title属性で記事やページのIDをスワップアウトしました。記事は2つの言語にもなっています(したがって、両方のスラッグをチェックします)。

    Routing.rb(blog.arkencyから変更されました。COM/2014/01/

    resources :users, :projects, :testimonials, :articles, :pages 
        class ArticleUrlConstrainer 
        def matches?(request) 
         id = request.path.gsub("/", "")[2..-1] 
         @article = Article.where(slug_nl: id).first || Article.where(slug_en: id).first 
         if I18n.locale == :en 
         @article = Article.find_by(slug_en: id) || Article.find_by(slug_nl: id) 
         else 
         @article = Article.find_by(slug_nl: id) || Article.find_by(slug_en: id) 
         end 
        end 
        end 
    
        constraints(ArticleUrlConstrainer.new) do 
        match '/:id', :via => [:get], to: "articles#show" 
        end 
    
        class PageUrlConstrainer 
        def matches?(request) 
         id = request.path.gsub("/", "")[2..-1] 
         @page = Page.friendly.find(id) 
        end 
        end 
    
        constraints(PageUrlConstrainer.new) do 
        match '/:id', :via => [:get], to: "pages#show" 
        end 
    
        resources :articles, :only => [:show], :path => '', as: "articles_show" 
        resources :pages, :only => [:show], :path => '', as: "pages_show" 
    

    決勝

    関連する問題