コントローラを生成してルートを変更しましたが、リンクを開くとローカルサーバーでエラーが発生します。
コントローラーとルートの生成
Rails generate controller StaticPages home about team contact
routes.rbを変更
MyApp::Application.routes.draw do
root to: 'static_pages#home'
match '/about', to: 'static_pages#about'
match '/team', to: 'static_pages#team'
match '/contact', to: 'static_pages#contact'
end
ルートパスは機能しますが、「about」、「team」、または「contact」リンクは機能しません。これは私が得るエラーです:
「HTTPメソッドを指定せずにルーターでmatch
メソッドを使用しないでください。アクションをGETとPOSTの両方に公開する場合は、via: [:get, :post]
オプションを追加してください。アクションを公開する場合GETするには、ルーターでget
を使用します。代わりに:match "controller#action"実行:get "controller#action" "
'match'を使用できないのはなぜですか?
match
を使用できますが、via:
オプションを追加する必要があります。
match '/about', to: 'static_pages#about', via: :get
match '/team', to: 'static_pages#team', via: :get
match '/contact', to: 'static_pages#contact', via: :get
必要に応じて、via:
のように他のHTTP動詞をvia: [:get, :post]
に渡すこともできます。
出典: Railsルーティングガイド
まず、via: :get
の最後にmatch 'st' => 'controller#action
を追加してHTTPメソッドを指定する必要があります
そして、get '/home', to: 'static_pages#home'
を使用することをお勧めします
ただし、コードがRESTfulに準拠しておらず、インデックス、新規、編集、作成、更新、表示、破棄の7つのアクションしかサポートしていないという問題があります。
これらは2つの解決策です:
SOL 1:それらを異なるコントローラー(家、約..)に置き、これらのコントローラーはすべてアクションindex
を持ちます。
SOL 2:作業が多すぎる場合は、それらをshow
アクションに一致させることができます。 static_pagesコントローラーを使用し、各ページ(home、about)がアイテムになります。
ルートは/static_pages/home /static_pages/about
のようになります
接頭辞static_pages
が原因で良くないことはわかっています。
ルートファイルの最後にカスタムルートを追加することで、これを簡単に取り除くことができます。
get '/:id', to: 'static_pages#show'
それでおしまい。そして、あなたがそれがあまりにも多くの仕事だと思うなら(私もそう思います)、この宝石をチェックしてください 高電圧 。楽しんで。