Rails - 覆盖活动记录属性的setter

时间:2014-11-15 17:10:28

标签: ruby-on-rails ruby-on-rails-4 http-patch

我正在构建一个rails服务器,其中一些用户跟踪其他用户位置的更改,并在每次更新位置时通过websockets获得通知。

目前我调用update_location操作而不是调用常规更新以更新位置并调用WebsocketRais触发器。这对我来说似乎很奇怪,我认为应该有更好的方法。

我所知道的唯一其他选项是调用更新操作并检查位置是否已更新,并通知订阅者。这对我来说似乎也很难看。

我希望能够以某种方式覆盖资源的Rails更新,并在每次更新位置属性时通知订阅者 - 类似于location属性的setter方法,其他事情不仅仅是设置。它甚至可能吗?我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

我认为可以采用单独的方法。但是,如果你想要补丁update_attributes,你可以像这样写:

def update_attributes(attrs)
  update_location = attrs.delete(:update_location)
  super.tap { notify if update_location }
end

或者您可以使用自定义attr&回调:

after_update :notify, if: :need_notify
attr_accessor :need_notify

# then
user.update_attributes location: smth, need_notify: true