|
|
|
rordeveloper |
|
||||||||||||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 11.4.2012 Репутация: нет Всего: нет |
Добрый день!
Помогите разобраться, как правильно использовать MVC в рельсах Мой вопрос легче объяснить на примерах. Модели: Event, Reply (события и отзывы). На каждое событие может быть оставлено много отзывов. В Event прописано, что он has_many отзывов, а у Reply - belongs_to событие. EventsController:
View events/show.html.erb:
Это нормально, вызывать из view методы моделей? А если надо отсортировать или отфильтровать эти отзывы (например, не показывать удаленные)? не писать же <% @item.replies.where('deleted = 0').order('date').each do |reply| %>? Или, может, правильней все же получить реплаи в контроллере?
А это тоже, наверное, неправильно, и сортировка и фильтрация должна быть спрятана в специально созданном для этого методе модели, а метод этот вызван из контроллера (см. ниже)?
И какой это должен быть метод? Метод класса, как я написал выше? Тогда ему надо передать экземпляр события (или его id). Или может быть экземпляра класса, как ниже?
Или может быть это должен быть метод модели Reply?
Вобщем, полные непонятки. Можно сделать миллионом способов, а как правильно? Наверное здесь главный вопрос - что/где на эту тему почитать. Можно на английском. Спасибо. Это сообщение отредактировал(а) rordeveloper - 11.4.2012, 12:21 |
||||||||||||
|
|||||||||||||
source777 |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 12 Всего: 56 |
Атрибуты в принципе нормально, хотя в сложных случаях предпочтительнее вызывать методы не Model, а ViewModel, см. draper
Это ближе всего к идеологически правильному варианту, хотя имя fetch_replies мне не нравится, оно не следует конвенции. Если критерии выбора отзывов универсальны в рамках приложения, то имеет смысл их все поместить в default_scope, в противном случае можно в default_scope отправить только where('deleted = 0'), а сортировку оставить в контроллере:
Это наиболее частый кейс, т.к. в реальных приложениях обычно несколько режимов сортировки. Почитать рекомендую Rails AntiPatterns: Best Practice Ruby on Rails Refactoring и "Agile Principles, Patterns, and Practices" (есть переводы на русский двух версий этой книги: с примерами на C# и с примерами на Java) Это сообщение отредактировал(а) source777 - 11.4.2012, 11:59 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
vlastelin8 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 23.3.2012 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
Правила форума "Ruby on Rails" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Ruby On Rails | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |