0

一部のユーザーが他のユーザーの場所の変更を追跡し、場所が更新されるたびに websockets から通知を受けるレールサーバーを構築しています。

現在、場所を更新して WebsocketRais トリガーを呼び出すために、通常の更新を呼び出す代わりに update_location アクションを呼び出します。これは私には本当に奇妙に思えますし、もっと良い方法があるはずだと思います。

私が知っている唯一の他のオプションは、更新アクションを呼び出して、場所が更新されているかどうかを確認し、サブスクライバーに通知することです。これも私には非常に醜いようです。

リソースの Rails 更新を何らかの形でオーバーライドし、location 属性が更新されるたびにサブスクライバーに通知できるようにしたいと考えています。これは、設定以外のことを行う location 属性のセッター メソッドのようなものです。それは可能ですか?どうすればそれができるでしょうか?

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 に答える