Rails 3.0 Модель / Дизайн контроллера Вопрос - PullRequest
0 голосов
/ 28 февраля 2011
class Client < ActiveRecord::Base
  has_many :hosts, :dependent => :destroy
end

class Host < ActiveRecord::Base
  attr_accessible :client_id, :host, :is_embedded, :gmaps_key
  belongs_to :client
end

Как видно из приведенного выше кода, клиент может иметь много хостов.Я пытаюсь понять, как спроектировать мой контроллер для хостов.Конечная цель - создать несколько «индексных» страниц, которые показывают хосты для каждого клиента.Мне не нужна страница, чтобы показать все хосты.Как бы вы порекомендовали настроить это?Должен ли я делать вложенную маршрутизацию?

resources :clients do
  resources :hosts
end

Ответы [ 2 ]

0 голосов
/ 28 февраля 2011

Мне кажется, что ваш лучший вариант - вложенная маршрутизация - по крайней мере, для индексных страниц хоста.Если вы хотите, чтобы все ресурсы хоста не размещались под клиентами, вы могли бы вложить только действие index.Например:

resources :clients do
  resources :hosts, :only => [:index]
end

resources :hosts, :except => [:index]

Это будет означать, что в вашем HostsController параметр client_id будет присутствовать только в действии index.Все остальные действия будут иметь только параметр id для хоста.Затем вы можете просмотреть все хосты для клиента, используя URL-адрес, подобный следующему:

http://localhost:3000/clients/10/hosts

. И вы увидите информацию об отдельном хосте, как это:

0 голосов
/ 28 февраля 2011

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

# in app/controllers/hosts_controller.rb
def index
  @hosts = Client.find(params[:client_id]).all
end

И вы можете получить доступ к этой странице через http://example.com/clients/1/hosts. Довольно просто, нет?

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