polymorphic_urlの使い方

概要

polymorphic_urlの使い方が分からず、どのようにして意図通りのURLを生成するか戸惑ったので忘備録として書きます。

コンテンツ

class Notification < ApplicationRecord
  belongs_to :notifiable, polymorphic: true
end

class Comment < ApplicationRecord
  has_many :notifiable, as: :notifiable
end

class Star < ApplicationRecord
  has_one :notification, as: :notifiable
end

上記は、コメント(Comment)またはスター(Star)が付けられた場合に通知する という想定で実装しています。

さて、本題のpolymorphic_urlを使用してURLを作成しようと思います。

polymorphic_url(comment) # => "http://www.example.com/comments/1"
polymorphic_url([comment, notification]) # "http://www.example.com/comments/1/notifications/1"
polymorphic_url([comment, Notification]) # "http://www.example.com/comments/1/notifications"
polymorphic_url([comment, notification], user_id: 1) # => "http://www.example.com/comments/1/notifications/1?user_id=1"

参考資料