Ruby on Rails: Наблюдатели и флеш-сообщения:
Я пытаюсь отправить флеш-сообщения и приветствия пользователям, если они впервые комментируют; в основном как то так:
class CommentObserver < ActiveRecord::Observer
def after_save(comment)
if comment.user.new?
Mailer.deliver_welcome_package(comment)
flash[:notice] = "Welcome! We just delivered a welcome package to your email"
end
end
end
Я не уверен, как я должен отображать это флэш-сообщение для пользователей после того, как они создали свой первый комментарий. Должен ли я поместить это флэш-сообщение в контроллер (с дополнительным "if comment.user.new?") Или есть способ отобразить флэш-сообщение более эффективно?
2 ответа
Ввод флеш-сообщения в метод мне кажется нормальным.
У меня обычно есть вспомогательный метод в моем файле application_helper, который проверяет flash и diplay.
def show_flash
[:notice, :error, :warning].collect do |key|
content_tag(:div, flash[key], :id => key, :class => "flash flash_#{key}") unless flash[key].blank?
end.join
end
У меня есть три типа сообщений: уведомление, предупреждение и ошибка, это проверяет, установлены ли какие-либо из них, если да, то печатает их, если нет, то ничего не печатается.
В моем макете у меня тогда есть..
<% show_flash %>
Во-первых, почему вы наблюдаете комментарии? Если вы хотите отреагировать на нового пользователя, почему вы не наблюдаете за пользователями?
Чтобы ответить на ваш вопрос, я бы определенно поместил назначение вспышки в вашем контроллере, причина в том, что вспышка является проблемой уровня обзора.
Раньше я использовал наблюдателей для отправки писем, но в последнее время только что отправил их в контроллер. В этом случае это сделает вашу жизнь немного проще.