0

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

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

我知道的唯一其他选择是调用更新操作并检查位置是否已更新,并通知订阅者。这对我来说也很丑陋。

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

4

1 回答 1

0

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

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

或者您可以使用自定义属性和回调:

after_update :notify, if: :need_notify
attr_accessor :need_notify

# then
user.update_attributes location: smth, need_notify: true
于 2014-11-15T17:32:34.903 回答