通知 - 快讯,如何
Notifications - flash message, how to
正在寻找一种方式来通知用户他们已获得新徽章。
我按照此处的说明设置了观察器:https://github.com/merit-gem/merit#getting-notifications
我的观察者代码是:
class ReputationChangeObserver
def update(changed_data)
description = changed_data[:description]
flash[:info] = description
end
end
Rails 投诉如下:
undefined local variable or method `flash' for #<ReputationChangeObserver:0x0000000586d648>
我知道 flash 是基本动作控制器的一部分。但是,我不知道观察者如何访问 flash 或 session,因为它似乎存在于 rails 框架之外。
我错过了什么?似乎没有任何关于如何实现用户通知的示例或教程(我能找到)。
请问有没有人可以分享一下他们的智慧?
据我所知,您无法通过观察者访问 flash。您需要一种单独的方式将消息传递给网页上的用户。例如,在 update() 方法中,捕获您想要显示的信息并创建 activity 的记录,您的控制器将使用该记录。您可以设置自己的模型或使用处理 activity 提要的 gem 之一。
根据您的用例,可能有几种不同的通知方式:
- 使用类似以下内容的实时通知:http://railscasts.com/episodes/401-actioncontroller-live?view=asciicast(您可以直接在上面的 update() 中发布数据并让订阅者使用它)
- 在网页上进行长轮询以提取任何更新:http://railscasts.com/episodes/229-polling-for-changes-revised?view=asciicast
- 显示用户页面加载的更新:设置 before_action 过滤器并检查用户是否有新的 activity 供稿。如果是,请将其添加到flash。
如果您知道您的用户会在一个页面上停留一段时间,1,2 将是合适的。例如,如果您的应用程序有仪表板页面或时间线页面(如 FB 或 Twitter)。
如果您知道您的用户将加载(访问)许多不同的页面,但您的用户在重新加载页面之前无法获得更新,则 3 是理想选择。
简而言之,没有办法直接将您的通知推送到观察者中。更新发生在后台,它不知道控制器。您需要存储(或在实时更新的情况下发布)更新,并且当用户加载您的应用程序时,让您的控制器拉取更新以向用户创建通知。
希望这对您有所帮助。
正在寻找一种方式来通知用户他们已获得新徽章。
我按照此处的说明设置了观察器:https://github.com/merit-gem/merit#getting-notifications
我的观察者代码是:
class ReputationChangeObserver
def update(changed_data)
description = changed_data[:description]
flash[:info] = description
end
end
Rails 投诉如下:
undefined local variable or method `flash' for #<ReputationChangeObserver:0x0000000586d648>
我知道 flash 是基本动作控制器的一部分。但是,我不知道观察者如何访问 flash 或 session,因为它似乎存在于 rails 框架之外。
我错过了什么?似乎没有任何关于如何实现用户通知的示例或教程(我能找到)。
请问有没有人可以分享一下他们的智慧?
据我所知,您无法通过观察者访问 flash。您需要一种单独的方式将消息传递给网页上的用户。例如,在 update() 方法中,捕获您想要显示的信息并创建 activity 的记录,您的控制器将使用该记录。您可以设置自己的模型或使用处理 activity 提要的 gem 之一。
根据您的用例,可能有几种不同的通知方式:
- 使用类似以下内容的实时通知:http://railscasts.com/episodes/401-actioncontroller-live?view=asciicast(您可以直接在上面的 update() 中发布数据并让订阅者使用它)
- 在网页上进行长轮询以提取任何更新:http://railscasts.com/episodes/229-polling-for-changes-revised?view=asciicast
- 显示用户页面加载的更新:设置 before_action 过滤器并检查用户是否有新的 activity 供稿。如果是,请将其添加到flash。
如果您知道您的用户会在一个页面上停留一段时间,1,2 将是合适的。例如,如果您的应用程序有仪表板页面或时间线页面(如 FB 或 Twitter)。 如果您知道您的用户将加载(访问)许多不同的页面,但您的用户在重新加载页面之前无法获得更新,则 3 是理想选择。
简而言之,没有办法直接将您的通知推送到观察者中。更新发生在后台,它不知道控制器。您需要存储(或在实时更新的情况下发布)更新,并且当用户加载您的应用程序时,让您的控制器拉取更新以向用户创建通知。
希望这对您有所帮助。