Rails Beginner - в какой контроллер помещать функции? - PullRequest
1 голос
/ 24 сентября 2010

Новичок в рельсах, и у меня есть то, что я считаю основным вопросом.

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

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

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

Спасибо,

Ответы [ 2 ]

5 голосов
/ 24 сентября 2010

Правильный способ 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, и у вас будет доступ ко всему, что вы указали в версии администратора ваших пользователейcontroller.

Вы можете прочитать больше в этом вопросе StackOverflow и прочитать о маршрутах здесь .

2 голосов
/ 24 сентября 2010

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

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

# in rails 3.0
$ rails generate controller admin/users

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...