posts#index
のルーティングをblog
に一致するように変更したところ、達成しようとしていたURLに/blog
が表示されるようになりました。
いくつかの方法で実際のブログ投稿を取得しましたが、現在のルートは/posts/this-is-a-test
のようになり、URLでblog
ではなくposts
も使用しています。
以下は現在のrouteファイルです。 friendly_id
gemを使用していますが、この質問への回答に何らかの違いがある場合。
resources :posts do
resources :comments
end
resources :contacts, only: [:new, :create]
root "pages#home"
get "/home", to: "pages#home", as: "home"
get "about" => 'pages#about'
get "pricing" => 'pages#pricing'
get "contact_us" => 'pages#contact_us'
match 'blog', to: 'posts#index', via: :all
end
path
オプションとリソースが役立つ必要があります。
resources :posts, :path => 'blogs' do
resources :comments
end
これにより、すべての/posts
および/post
が/blogs/
および/blog
に変更されます。
posts_path
をblogs_path
に、new_post_path
をnew_blog_path
になど、ルートのヘルパーメソッドを変更する場合は、 as
タグを使用して変更できます。
resources :posts, :path => 'blogs', :as => 'blogs' do
resources :comments
end
または、さらに良い方法として、コントローラーを指定してblogs
を次のように直接ルーティングできます。
resources :blogs, controller: 'posts' do
resources :comments
end
これがRailsのすごさです! :)
match 'blog/:id' => 'posts#show'
うまくいくはずです。しかし、投稿コントローラーのすべてのメソッドをブログに一致させたい場合(そして投稿パスを使用したくない場合)、代わりにコントローラーの名前をblogに変更し、ルートにresource:blogを追加します。