2013-04-02 3 views
1

В моем приложении Users может LikePrograms. Каждая из них является моделью, Like является полиморфной.Какой контроллер рельсов я должен использовать?

В какой-то момент я хочу, чтобы увидеть все, что UsersLikeProgram или все Programs в User Likes.

ли лучше иметь действие likes и likers контроллер в контроллере users и programs? Или должен ли я иметь контроллер likes как вложенный ресурс как с действием, так и с programs (или индексом, который проверяет, какой вложенный ресурс используется)?

Я понимаю, что все они могут работать, но не были уверены, что такое лучшие методы Rails.

ответ

1

Я бы связал ваше приложение с UsersController с действием-членом likes, которое возвращает Program s, который понравился пользователю. А затем введите ProgramsController с действием элемента likers, которое дает User s, которые подобны этой программе.

Для упрощения дальше, вы также можете просто включить любит пользователя в show действия, (а так же, показывают пользователям, которые любят программу в show действия программы), хотя вы можете в конечном итоге выборка больше информации, чем необходимые в действиях show, делая это таким образом.

+0

Есть ли общее правило при решении этих вопросов? Чем меньше контроллеров, тем лучше? – dewyze

+0

Если вы создали 'LikesController', его ресурс был бы« как », который, по-видимому, похож на« модель объединения »в вашем сценарии. В вашем описании вам показалось, что вы либо хотите получить доступ к «симпатиям», организованному определенным пользователем или конкретной программой, поэтому имеет смысл представить подобные действия как действия на UserController или ProgramController. –

1

С удовольствием у вас будет LikesController, и действие «create» внутри него займет user_id и program_id. Это, вероятно, пользователь будет зарегистрирован в системе (и не будут переданы в URL), и это будет иметь смысл создать Мол, передавая program_id к URL, который выглядит примерно так:

POST /likes, :params => { :program_id => ___ } 

Вы может потребоваться показать список Likes (индексная страница), возможно, позволяя пользователям редактировать и удалять. Если это так, все ваши действия будут на lik_controller. Обычно это зависит от вашей ситуации, но спокойный дизайн обычно подходит для начала.

+0

Как и в случае с AJAX. Есть действия создания и уничтожения, эта часть работает нормально. Мне понадобится Likes как вложенный ресурс как у пользователей, так и программ, чтобы поддерживать действия в контроллере подобного типа. Кажется, проще в контроллерах User и Program ... но он не чувствовал себя очень RESTful. – dewyze

+1

Я вижу. Если вы ищете список программ, то это будет в действии индекса в ProgramController. Он может быть отфильтрован user_id и иметь URL-адрес, например users/1/programs. Но, возможно, вы действительно хотите понравиться пользователям/1/нравится. Если это так, я бы просто добавил метод фильтрации подобных в действии индекса на подобном контроллере. Последний вариант, который я использовал, заключается в создании контроллеров для соединений - UserLikesController и ProgramLikesController. Единственным действием будет индекс. Это хорошо, потому что вы можете подклассировать Likes и сохранять разрешения перед фильтрами и т. Д. – Swards

+0

Oooo, это интересная идея. Я должен попробовать это и посмотреть, как это работает. – dewyze

Смежные вопросы