3

User and Notification モデル、User has_many Notification があります。通知はカミナリによってページングされます: 通知モデルの定義、

class Notification
  ...
  field read, type: Boolean, default: false
  belongs_to :user
  scope :recent, ->(source) { where(source: source).desc(:created_at) }
  ...
end

通知コントローラーでは、

@notifications = current_user.notifications.recent(@source).page(params[:page])

次に、現在のページをレンダリングした後に read 属性を true に変更したいのですが、うまくいきません:

@notifications.update_all(read: true)

read属性はそこで変更されていません。また、1つのトリッキーなことがあります:

  1. スコープ ディレクティブ (recent) を削除すると、update_all は機能しますが、現在のユーザーだけでなく他のすべてのユーザーも更新されます。

シン サーバーにいくつかのログがありますが、エラーは見つかりません。

MOPED: 127.0.0.1:27017 UPDATE       database=cse_development collection=notifi
cations selector={"$query"=>{"user_id"=>"509765c42061c79036000004", "source"=>"t
opic"}, "$orderby"=>{"created_at"=>-1}} update={"$set"=>{:read=>true}} flags=[:m
ulti] (0.9999ms)

私は何かが恋しいですか?

前もって感謝します!

4

1 に答える 1

0

これを試すことができます

@notifications.update_all(:read => true)
于 2012-11-09T07:22:50.010 に答える