Ruby on rails - как должен выглядеть контроллер при работе с коллекциями? - PullRequest
1 голос
/ 22 ноября 2011

У меня есть простое приложение, в котором пользователь может управлять колодами карт.

В моей модели у меня есть:

  • карта
  • DeckOfCards

На мой взгляд / DeckOfCards /: id / edit

Я хочу позволить пользователю создать новую карту и добавить ее в текущую колоду.

В настоящее время у меня есть помощник form_for, который отправляет сообщения в / Cards / new

Должен ли мой контроллер карт быть жестко запрограммирован для перенаправления обратно на DeckOfCards? Что если позже я захочу создавать карты независимо от колоды?

Другой возможный подход, который я рассматриваю, - это настраиваемое действие на моем контроллере DeckOfCards для обработки этого случая. Если я это сделаю, есть ли способ использовать помощники по формам или для этого требуется, чтобы я отправлял обратно в связанный контроллер для объекта, который я создаю?

Мне нравится структура, которую приносит рельсы, но когда я имею дело с несколькими объектами, я не понимаю, как должна выглядеть архитектура. Боюсь, что если я неправильно использую эти парадигмы, я окажусь в мире боли!

Можете ли вы порекомендовать более гибкий подход к этому?

Спасибо за любую помощь

1 Ответ

3 голосов
/ 22 ноября 2011

Настройка должна быть довольно простой:

Вы сказали, что у вас есть две модели: карты и DeckOfCards. Отлично!

Теперь в ваших маршрутах:

resources :cards
resources :deckofcards do
  resources :cards, :controller => "cardsindeck" # gives you, e.g. <root>/deckofcards/1/cards/5/show
end

Теперь вам нужно два разных контроллера для карт:


CardsController: обрабатывает CRUD для карт, независимых от DeckOfCards (у вас все еще могут быть ссылки на DeckOfCards, к которым принадлежит карта)

CardsInDeckController: обрабатывает карты с помощью DeckOfCard's


В CardsInDeckController вы можете получить доступ к картам DeckOfCard, к которым принадлежит текущая карта, по номеру params[:deckofcards_id], например. в вашем новом действии:

@card = DeckOfCards.find(params[:deckofcards_id]).cards.build
...