【问题标题】:Rails - override a setter for an active record attributeRails - 覆盖活动记录属性的设置器
【发布时间】:2014-11-15 17:10:28
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我认为为此有单独的方法是可以的。但是,如果你想要补丁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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2012-01-22
      • 2019-11-21
      • 2017-08-29
      相关资源
      最近更新 更多