Rails как сделать example.com/post/1 для example.com/blog/post/1

#ruby-on-rails #ruby #ruby-on-rails-4

#ruby-on-rails #ruby #ruby-on-rails-4

Вопрос:

У меня есть блог с root root 'posts#index'

И лучше всего работает с example.com/ to example.com/posts

Но я хочу что-то вроде этого:

example.com/blog/posts/1 .

Я попытался создать блог Controller и добавить

 resources :blog do
resources :posts
end
  

Но это делает мои маршруты к blog/:id/posts/:id

Комментарии:

1. есть ли у вас связь между блогом и публикациями?

2. Нет. я начал создавать из posts controller и model. затем я просто создал контроллер блога, чтобы сделать это example.com/blog/post , но не могу этого сделать

Ответ №1:

Если у вас нет связи между post и blog , как вы упомянули, rails дает вам свободу объявлять маршруты как наши собственные.

итак, чтобы создать маршрут example.com/posts/1 к, example.com/blog/posts/1 просто добавьте пользовательский маршрут в конце.

get '/blog/posts/:id', to: :show, controller: 'posts'

что это делает, так это повторяет предыдущий маршрут и делает этот маршрут конечным.

Теперь введите rake routes, и он предоставит вам последний маршрут в виде,

GET /blog/posts/:id(.:format) posts#show

Теперь вы можете получить доступ с помощью,

example.com/blog/posts/1

Ссылка для маршрутизации rails

Комментарии:

1. Да! но это слишком сложно. Но я нашел приведенный ниже 42linoge's ответ немного простым.

Ответ №2:

Просто чтобы расширить ответ @ Sravan. Если у вас есть несколько маршрутов, которые будут начинаться с /blog /, возможно, вы захотите проверить руководство Rails по маршрутизации.

Вы можете добавить что-то вроде

 scope '/blog' do
    resources :posts
    resources :users
    resources :images
end
  

Которое создаст соответствующие маршруты в / blog / .

Ответ №3:

 namespace :blog do
  resources :posts
  resources :users
  resources :images
end
  

И ваш контроллер с пространством имен будет выглядеть следующим образом: Blog::PostsController