2010-09-24 3 views
1

Новое для рельсов, и у меня есть то, что я считаю основным вопросом.Rails Beginner - на какой контроллер поставить функции?

В режиме администратора будут выполняться различные операции с различными моделями данных. У меня есть макет «admin», который имеет различные вкладки, которые пользователь нажимает для загрузки форм для редактирования различных наборов данных.

Если контроллер для всего, что можно редактировать в этом представлении, находится в admin_controller (т. Е. Имеет edit_product, edit_user ...) или лучше оставить функции в контроллере для каждой модели (скажем, users_controller, products_controller, orders_controller) и указать в контроллерах использование макета администратора?

Я работаю над своим первым проектом рельсов, и кажется, что это работает, но я, очевидно, хочу следовать правильному соглашению, поэтому любой намек или ссылка на статью об этой теме будут оценены.

Спасибо,

ответ

5

Правильный путь Rails, чтобы сделать это было бы использовать Namespaces. Я приведу пример ниже:

В вашей папке controllers вы добавляете новую папку под названием admin, а для каждой модели, которую хотите изменить как администратор, добавьте контроллер. Вот простое приложение блог:

app/ 
    models/ 
    views/ 
    controllers/ 
    users_controller.rb 
    posts_controller.rb 
    comments_controller.rb 
    admin/ 
     users_controller.rb 
     posts_controller.rb 
     comments_controller.rb 

Обратите внимание на новую папку слой в нашей папке controller. Внутри каждого из этих файлов, вы измените определение класса, от:

class UsersController < ApplicationController 

к:

class Admin::UsersController < ApplicationController 

Теперь в файле congif/routes.rb, вы можете переместить ваши маршруты в пространство имен администратора , например, так:

map.namespace :admin do |admin| 
    admin.resources :users 
    admin.resources :posts 
    admin.resources :comments 
end 

Теперь вы можете перейти к URL, такие как: http://localhost:3000/admin/users/1, и вы будете иметь доступ к любой, указанный в версии администратора вашего контроллера пользователей.

Вы можете узнать больше о this Задайте вопрос StackOverflow и прочитайте маршруты here.

+0

Благодарим вас за то, что нашли время, чтобы написать это. Это именно то, что я искал и должен быть включен в стандартные направляющие для направляющих. – nktokyo

2

Хороший ответ от Майка. Я хотел бы добавить, что вы можете увидеть «стандартные» рельсы код для этого с помощью генератора:

# in rails 2.3 
$ script/generate controller admin/users 

# in rails 3.0 
$ rails generate controller admin/users 

Слэш в имени контроллера определяет пространство имен. Также см. rake routes для названных путей, которые он создает, например. admin_users_path и т. Д.

Смежные вопросы