Как добавить второй контроллер в существующую модель в Ruby on Rails? - PullRequest
2 голосов
/ 19 октября 2011

У меня есть одна модель, которую я хочу представить через два набора представлений, и выполняю логику по-разному в зависимости от того, какое представление используется.

Примером этого может быть установка одного контроллера / представления дляпредоставление веб-интерфейса и другого контроллера / набора представления для предоставления рабочего стола или мобильного или другого типа интерфейса.

Это вопрос из двух частей:

1) Это нормально?«стилистически, чтобы иметь несколько контроллеров, которые совместно используют модель?

2) Как именно я бы хотел добавить другой контроллер в существующую модель?

Ответы [ 4 ]

3 голосов
/ 19 октября 2011

Если вам нужно только одно или два действия, я бы рекомендовал хранить все это в одном контроллере. Не нужно делать вещи слишком сложными. Если вам нужен полный набор действий REST для каждого контроллера, вот пример того, как я бы это сделал:

Допустим, у вас есть сайт событий, на котором также есть группы. События могут быть созданы, отредактированы и т. Д. В контексте группы или полностью самостоятельно. Давайте посмотрим на пару URL-адресов, для которых потребуются полные действия REST для каждого:

/groups/1/events  # Lists all events associated with a group
/events           # Lists all events

Настройте маршруты следующим образом:

resources :events
resources :groups do
  resources :events, :controller => 'groups/events'
end

Теперь у вас будет два контроллера. Один живет в app/controllers/events_controller.rb, а другой в app/controllers/groups/events_controller.rb

Последней важной деталью является пространство имен второго контроллера:

class Groups::EventsController < ApplicationController

Вы можете сделать это, используя рельсы, встроенные в генераторы:

rails g controller 'groups/events'
1 голос
/ 19 октября 2011

Если вас беспокоит только представление, данный контроллер может отображать разные представления.RoR - это RESTfull, поэтому вы можете заставить свой контроллер отображать представления на основе того, что запросил клиент (FAT, Mobile или web).

Если у вас совсем другая логика, тогда да, у вас может быть другой контроллер поверх объекта модели.

1 голос
/ 19 октября 2011

Если вы хотите изменить CSS только в зависимости от виджета клиентов, чтобы ваш сайт лучше подходил для смартфонов, сенсорных панелей, ... я бы посоветовал вам прочитать sth. о параметрах мультимедиа при включении таблиц стилей:

http://www.w3.org/TR/CSS2/media.html

1 голос
/ 19 октября 2011

Конечно, все в порядке - если они настолько разные, что просто добавление действий к одному не разделяет их достаточно технически или когнитивно, почему бы и нет?

Существуют разные способы его настройки; руководство по маршрутизации охватывает их все - использование которых зависит от множества факторов.

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