Rails флеш хэш нарушает MVC? - PullRequest
2 голосов
/ 08 января 2010

Я знаю, что флэш-хэш Rails не является чем-то новым, но я продолжаю сталкиваться с той же проблемой с ним.

Контроллеры должны быть для бизнес-логики и запросов базы данных, а не форматировать строки для отображения пользователю. Но хэш-память всегда устанавливается в контроллере. Это означает, что мне нужно взломать и обойти Rails, чтобы использовать созданные мной помощники для форматирования строк для флеш-хэша.

Это просто прагматичный компромисс с MVC или я что-то здесь упускаю?

Как вы справляетесь с этой проблемой? Или вы даже не видите это как единое целое?

Ответы [ 4 ]

2 голосов
/ 08 января 2010

Rails не обязательно строго MVC. В мире Rails контроллеры больше похожи на так называемые View-Controllers в шаблоне MVC.

Кроме того, я бы сказал, что в «чистом» MVC контроллеры должны , а не выполнять запросы к БД и бизнес-логику, которые должны быть инкапсулированы на уровне модели. Контроллеры предназначены для перемещения данных между представлением и моделью.

А как насчет создания вспомогательных методов для представления, форматирующего все, что вы вставляете во флэш-хэш? Флэш не должен содержать только строковые значения; он может содержать произвольные объекты. Я часто помещаю массив ошибок проверки модели в flash[:error] и пишу вспомогательный метод для форматирования этих сообщений в <ul>.

2 голосов
/ 08 января 2010

Кажется возможным "принудительно" получить доступ к помощникам из контроллеров. Смотрите это обсуждение здесь:

http://lojic.com/blog/2007/07/27/using-helpers-inside-controllers-in-ruby-on-rails/

Вы также можете «визуализировать» частичную переменную экземпляра. Смотрите эту страницу:

http://snippets.dzone.com/posts/show/396

Обычно, если вы вызываете "render_partial" в контроллере, ничего, кроме частичного, не будет отображено.

Иногда полезно визуализировать частичное в переменную экземпляра в виде строки, чтобы представление можно было по-прежнему отображать как нормальный, и строка может быть передана в представление.

add_variables_to_assigns

@ content_for_navbar = @ template.render_partial 'layouts / public_navbar'`

0 голосов
/ 07 апреля 2010

Метод, описанный Shedd, не работает для меня. Второй метод, описанный в http://snippets.dzone.com/posts/show/396, сработал:

@content_for_navbar = render_to_string :partial => "layouts/public_navbar"
0 голосов
/ 08 января 2010

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

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