2016-12-10 16 views
0

申し訳ありませんが、私の英語は悪いです。質問:列タイトル、説明などを含むモデルページがあります。これらのページを作成、変更、破棄できます。私はリンクmydomain/pages/1の内容を見ることができます。私は各ページがテンプレートとルートになっている必要があるので、リンク上のコンテンツを見ることができます(例:maydomain/contacts)。どうやってするの?お願い助けて。独自のソリューションを実装するRuby on Railsページコントロール

+1

あなたは[friendly_id](https://github.com/norman/friendly_id)の宝石を見たいかもしれません。 – spickermann

答えて

0

一つの方法は、あなたのルートファイルにこれを追加することです:

get '/mydomain/:slug, to: 'pages#show'

これはかなり一般的マッチャーですので、それがないように、あなたのルートの下にそれを追加他のものを無効にする。

その後、あなたのコントローラーのshowアクションは、以下のようになります。もちろん

def show 
    @page = Page.find_by_slug(params[:slug]) 
end 

これは、あなたのページのテーブルの上にslugカラムを前提としています。

0

私は、私はあなたが二つの部分に問題を分離することをお勧めしたい(例えばmyapp.example.com)あなたのサイトのルートURLを意味する「MYDOMAIN」で

を想定しています:

  1. URL内の項目を識別するためにid以外の属性を使用する
  2. コントローラを指定する必要がないようにルートを縮小します。

については、Rails routes with :name instead of :id url parametersを参照してください。@spickermannが示しているように、friendly_idは良い解決策である可能性があります。

2の場合は、コントローラ名なしでルートを作成してから、ルート定義にコントローラを指定する必要があります。 (Rails Routing Guide参照):そのために

get ':param', to: :show, controller: 'pages' 

が動作するように、それは他のルートとinteferないように、あなたは(routes.rbを、下部)の後に、それを配置する必要があります。私はまた、 adding a constraint to the routeをお勧めしたいと思う - 間違ったURLをその経路にルーティングすることができます。