2014-02-18 2 views
1

Мой вопрос здесь о правильном способе выполнения маршрутизации и контроллеров для моего простого приложения. Честно говоря, я застрял в модели User и Post.Правильная маршрутизация для пользовательской модели приборной панели и его сообщений в Rails 4.0

Я получил его разгромили, как это:

match '/dashboard', to: 'dashboard#user' 

В контроллере она принимает сессионный идентификатор пользователя, чтобы найти пользователя и его сообщения (посты и профиль полностью приватной для пользователя). Пока что приборная панель служит своей цели. Вопрос в том, куда я иду отсюда? Сообщения отображаются в том же представлении, что и список сообщений. Для редактирования/обновления и создания я хотел бы, чтобы мои маршруты были /dashboard/posts/:id.

Это укажет мне на использование ресурса. Наконец: Использует ли scope '/dashboard' или path: '/dashboard/posts' хороший подход, или это против «пути Rails»? Или у меня есть совершенно неправильная идея, что здесь происходит?

Я боюсь полностью испортить код и повторять себя снова и снова (как в аутентификации, так и при сохранении путей в чистоте).

ответ

3

Вы можете либо использовать namespace или nested resources, как это:


пространства имен

#config/routes.rb 
namespace :dashboard do 
    root to: "users#index" 
    resources :posts, :comments 
end 

#app/controllers/dashboard/users_controller.rb 
Class UsersController < Dashboard::ApplicationController.rb 
end 

Уплотненного

#config/routes.rb 
resources :user, path: "dashboard", as: "dashboard" do 
    resources :ads 
end 
+0

Спасибо за ваш ответ. Я просто хотел спросить: это хороший подход, когда я использую только метод '# dashboard'? Я знаю, что это можно сделать, используя 'only:: index', но я не использую этот ресурс. Вы бы рекомендовали использовать пространство имен? – Anton

+1

Я бы полностью рекомендовал метод пространства имен, поскольку он является расширяемым. Использование вложенного ресурса становится беспорядочным - наличие пространства имен означает, что у вас есть совершенно отдельный раздел для вашего приложения. Вот где я опираюсь, как это сделать: http://iain.nl/backends-in-rails-3-1 –

1

Я поклонник явного указания всех маршрутов для обеспечения безопасности и четкости маршрутов. Так что для вашего дела делать что-то вроде:

#Dashboard 
get '/dashboard', to: 'dashboard#user', as: 'dashboard' 
get '/dashboard/posts/:id', to: 'posts#show', as: 'post' 

#Posts 
get '/dashboard/posts/:id', to: 'posts#new', as: 'new_post' 
post '/dashboard/posts/:id', to: 'posts#create', as: 'create_post' 
put '/dashboard/posts/:id', to: 'posts#update', as: 'create_post' 

Больше информации на http://guides.rubyonrails.org/routing.html

+0

Спасибо, я обязательно рассмотрю этот подход в своей работе. Я также хотел поблагодарить вас за то, что вы указали метод 'put', я так сильно придерживался' match', что забыл, что на самом деле есть метод для patch/put verb! – Anton