Ресурси за влагане на потребителски коментар за събитие

Опитвам се да стана по-добър с Rails и ресурси за влагане. Потребителят има много събития (и обратно) чрез таблицата за присъединяване на UserEvent. Също така искам потребител да коментира събитие. Досега събитието е вложено под потребител в моите ресурси. Как бихте вложили коментар? Това ще бъде ли вложено под Събитие, така че да има два последователно вложени ресурса под Потребител? Как ще работи това?


person John    schedule 17.01.2014    source източник


Отговори (1)


Мисля, че това би бил предложеният от мен вложен подход:

resources :users
resources :events do
  resources :comments
end

При връзка много към много обикновено няма смисъл да се влагат един под друг, защото нито един от тях няма по-силна ограничаваща връзка.

Във вашия сценарий потребителят не принадлежи на едно събитие и събитието не принадлежи на един потребител, така че това, че вашите маршрути го представят по този начин, не моделира напълно връзката. Вашите URL адреси ще изглеждат като /events/1/users/2. Това означава, че потребител 2 съществува само в събитие 1.

Мисля, че би имало смисъл вашите User и Event да са ресурси от най-високо ниво. Comments, от друга страна, имат някаква собственост, която има смисъл да се влага. Повече от вероятно Comment ще бъде свързано с Event по отношение на контекста. User е просто лицето, отговорно за това. Влагането на коментари под потребителя ще ви даде лесни URL адреси за показване на всички коментари за даден потребител, но се обзалагам, че е по-вероятно да покажете всички коментари за Event. Имайки това предвид, бих предложил да вложите Comments под Events.

Това също има смисъл, ако трябва да изтриете потребителя и nullify user_id в модела Comment. Все още можете да имате URL адрес за коментара. Ако изтриете Event, коментарите вероятно вече не са полезни, така че можете просто да ги унищожите.

person Marc Baumbach    schedule 17.01.2014
comment
Само едно малко допълнение, можете да промените :users маршрутите, за да включват: get 'comments', on: :member, за да ви дадат URL за извличане на всички коментари, които даден потребител притежава. - person Marc Baumbach; 17.01.2014