Первое решение лучше, однако для этих случаев была создана namespaces
, и лучшая практика заключается в использовании пространств имен, когда необходимо соответствующее различие между пользовательским сайтом и областью администрирования.Подробнее об этом здесь
Ваша структура каталогов должна выглядеть следующим образом:
controllers/
|--admin/
|--posts_controller.rb
В ваших маршрутах вы помещаете все необходимое в пространство имен администратора:
namespace :admin do
resources :posts, :comments
end
У ваших контроллеров должна быть папка admin
, а контроллер в административной области будет выглядеть так:
class Admin::PostsController < ApplicationController
end
У вас также должна быть папка admin
в ваших представлениях, где выпоместите соответствующие виды:
views/
|--admin/
|--posts/
|--index.html.erb
|--...
Вы также можете указать пространство имен своих моделей, но это зависит от ваших потребностей, это хорошо, когда вам нужно иметь разные модели с одинаковым именем.Например, если вам нужны разные таблицы для пользователей с правами администратора и разные таблицы для обычных пользователей.Лично я не стал бы использовать пространство имен модели, просто в очень оправданных случаях.
Второй вариант, я думаю, может вызвать сильную головную боль, вы потеряетесь в выражениях if, я вообще не рекомендую это делать.