2016-10-19 2 views
1

アプリケーションで、私は作業している、私は通知システムをインストールする必要があります。rails多形関連、モデルに応じたリダイレクト、モデルコントローラを使用

class Notification < ActiveRecord::Base 
    belongs_to :notifiable, polymorphic: true 
end 

class Request < ActiveRecord::Base 
has_many :notifications, as: :notifiable 
end 

class Document < ActiveRecord::Base 
has_many :notifications, as: :notifiable 
end 

作成し、通知が貴様にリダイレクトする必要があります後は、通知の種類に応じて表示するので、それは同じモデルと異なるリダイレクトforthe可能性があり、私は多くの異なる必要があるので(そうredirect_toのnotification.notifiableは解決策ではありませんショーだけでなく、同じモデルのリダイレクション)。 polymorphic_pathまたはurlで作業していても、異なるリダイレクトを与えず、定義済みのプレフィックスヘルパーのみを与えます。

もっと明示的に必要なものは、たとえば、リクエストが送信される2つの異なるタイプの通知を受け取ります。リクエストを送信すると、リクエストをリダイレクトしますが、リクエストが完了すると彼のダッシュボードにリダイレクトされました。

notifications_controllerにリダイレクトしてモデルをテストしてから、通知タイプをもう一度テストしたくない場合は、多態性が役立つことを願っています。整数:コントローラモデル内のメソッドを呼び出す方法(モデルは、多型の関連付けから検出された)

と感謝

+0

"コントローラモデルでメソッドを呼び出す方法があります。"何について:@ notification.notifiable.is_a?(Request) – eeeeeean

+0

あなたの専門用語に問題があります。何かをクリックしても "リクエストにリダイレクト"されませんが、notifications_controllerで何もしないことには関係がありません。あなたは何が起こるかを見たいと思うより具体的なステップを記述できますか? – Eric

答えて

0

iが通知モデル、MESSAGE_TYPEに属性を追加することになったがあります。 通知がクリックされると、リダイレクトは常に同じになります。NotificationControllerのメソッド(redirect_notification)に通知され、依存モデルも(多相関係から)通知されます。 NotificationControllerで :notification.notifiableを使用した場合

def redirect_notification  
    notification =Notification.find(params[:id]) // here i get the notification 
    notification.notifiable.get_notification_path(notification.message_type) 
end 

我々はpoymorphicを活用します。 だから、私は例として、通知とポリモーフィックな関連を持っている各モデルにおけるget_notification_path(MESSAGE_TYPE)というメソッドを定義します。

class Document < ActiveRecord::Base 
    has_many :notifications, as: :notifiable 
    def get_notification_path(message_type) 
    if message_type == 0 
     "/documents"// this is just an example, here you can put any redirection you want, you can include url_helpers. 
    elsif message_type == 1 
     url_for user_path 
    end 
    end 
end 

この道を、私は多型の関連付けを使用して、私は必要なリダイレクトを取得し、追加することなく、不要なルート。

+0

このプロジェクトでは、コンテキスト(各コンテキストはユーザーの場所によって異なります)に表示される通知と履歴の両方を追加するので、特定のnotifと履歴を表示します。もし誰でもそれを作ることについての詳細が必要なら自由に聞くことができます。 –

関連する問題