0

レールでルーティングがどのように機能するかについて頭を悩ませようとしています。基本的に、シンプルな CMS を作成しようとしています。

ユーザーはページを CRUD できるようになるため、何らかの動的機能がどこかになければなりません。

ID、名前、およびコンテンツを持つ単純なページ モデルを作成しました。

URL は各ページ名に一致し、各ページのコンテンツを表示します。

  • example.com
  • example.com/about
  • example.com/news
  • example.com/staff

URL を正しいページに一致させるにはどうすればよいですか?

(解決策は、ページ名を関連するコントローラーとアクションに渡し、データベース内のページと一致するかどうか、ページのコンテンツを表示するかどうかをテストすることだと思います)。

4

1 に答える 1

1

標準的な解決策は、モデルでオーバーライドto_paramして、URL と互換性のある一意のページ名を返すことです。

 def to_param
   title.parameterize
 end

このように、すべての URL ヘルパーはこの値を使用して URL を構築します。

 page_path(@some_page) # => 'pages/some-page-title'

次に、コントローラーで、パラメーターからページをフェッチできるファインダーメソッドを何らかの形で実装する必要があります (パラメーターは で利用可能になりますparams[:id])。通常は次のようになります。

 class Page < ActiveRecord::Base

   def self.from_param(param)
     where(title: param).first
   end

   def self.from_param!(param)
     from_param(param) || fail(ActiveRecord::RecordNotFound)
   end

 end

ルート パスからページにアクセスできるようにするには、次のようにします。

  Rails.application.routes.draw do 

    resources :pages, path: '/'

  end

注意してください!このルートを の最後に配置しroutes.rbないと、すべてをキャッチします。

于 2013-11-04T14:57:42.520 に答える