Tag: observer pattern

如何在模型观察器中获取current_user?

鉴于以下型号: Room (id, title) RoomMembers (id, room_id) RoomFeed, also an observer 当房间标题更新时,我想创建一个RoomFeed项目,显示用户是谁进行了更新。 @room.update_attributes(:title => “This is my new title”) 问题在于我对RoomFeed的观察者: def after_update(record) # record is the Room object end 我无法获得刚刚进行更新的人的user.id. 我该怎么做呢? 有没有更好的方法来进行更新,所以我得到current_user?

RoR:nil的未定义方法`url_for’:NilClass

我有一个标准的Rails应用程序。 创建提示时,我想为每个对该提示感兴趣的用户创建一条消息。 这听起来很简单吧? 它应该是… 所以,我们从Tip Observer开始: class TipObserver < ActiveRecord::Observer def after_save(tip) # after the tip is saved, we'll create some messages to inform the users users = User.interested_in(tip) # get the relevant users users.each do |u| m = Message.new m.recipient = u link_to_tip = tip_path(tip) m.body = "Hello #{u.name}, a new tip: #{link_to_tip}" m.save! […]

如何为每个表在Rails中创建完整的审核日志?

我们最近开始在我们公司进行合规性推动,并且需要保留我们目前在Rails应用程序中管理的数据的完整历史记录。 我们已经可以将每个操作的描述性内容简单地推送到日志文件中,这是一种相当不引人注目的方式。 我倾向于在ApplicationController做这样的事情: around_filter :set_logger_username def set_logger_username Thread.current[“username”] = current_user.login || “guest” yield Thread.current[“username”] = nil end 然后创建一个看起来像这样的观察者: class AuditObserver < ActiveRecord::Observer observe … #all models that need to be observed def after_create(auditable) AUDIT_LOG.info "[#{username}][ADD][#{auditable.class.name}][#{auditable.id}]:#{auditable.inspect}" end def before_update(auditable) AUDIT_LOG.info "[#{username}][MOD][#{auditable.class.name}][#{auditable.id}]:#{auditable.changed.inspect}" end def before_destroy(auditable) AUDIT_LOG.info "[#{username}][DEL][#{auditable.class.name}][#{auditable.id}]:#{auditable.inspect}" end def username (Thread.current['username'] || "UNKNOWN").ljust(30) end end 并且通常这很好用 ,但是当使用添加到has_many:through […]