0

私は実績システムを構築しており、最後の部分はユーザーに通知しています。モデルでアチーブメントが作成されたら

class Achievement < ActiveRecord::Base

   def self.check_conditions_for(user)
     if user.month_views >= 30 and !user.views_awarded?(self)
      user.award(self)
     end
   end
end

ユーザーが閉じることができるカスタム通知をユーザーにフラッシュする必要があります。モデルからこれを開始する最良の方法は何ですか? コントローラーからのみ Flash メッセージを呼び出すことができることはわかっていますが、この場合は回避策が必要です。スタック オーバーフローがバッジを表示する方法と非常によく似ています。

4

1 に答える 1

2

わかりましたので、ユーザーがビデオを表示した場合 (おそらく何らかの URL にアクセスしたと思われますAchievement.check_conditions_for(user))、関連付けられたアクションを呼び出すだけで済みます。Achievement.check_conditions_for(user)通常のフラッシュ メッセージとして送信できる何らかの値 (おそらく通知メッセージ) を返すことができます。何らかのアクションが呼び出されたときにこれが実行されるだけの場合、ここで回避策は必要ありません。

たとえば、コントローラーがVideosあり、アクションを呼び出している場合watch:

def watch
  @video = Video.find(params[:id])
  @notice = Achievement.check_conditions_for(current_user)
  respond_to do |format|
    format.js
  end
end

app/views/videos/watch.js.erb:

alert("<%= @notice %>");
于 2012-07-01T20:08:55.787 に答える