Тут нужно решить две задачи.
1. Связать посты промежуточной сущностью PostAttachment, что позволит использовать аттачмент с разными постами.
class PostAttachment < ActiveRecord::Base
belongs_to :post
belongs_to :attachment
end
class Post < ActiveRecord::Base
has_many :post_attachments
has_many :attachments, through: :post_attachments
end
class Attachment < ActiveRecord::Base
...
end
2. Реализовать полиморфизм у самого Аттачмента.
Можно пойти напрямую, и создать под каждый тип аттачмента свой класс, а затем воспользоваться тем, что
предлагает рельса внутри PostAttachment. Таким образом, у Вас получится довольно практичная связь поста с N разных классов.
Если этот способ кажется грубым, то можно объединить эти N классов в одну табличку с помощью
Single Table Inheritance, например
вот так. Очевидный плюс, который Вы при этом получите — каждый из классов VideoAttachment, AudioAttachment и т.п. будет явно отделен от самого Attachment. Соответственно, логика будет хорошо разделена.