У меня есть модель ActiveRecord Media
, которая должна хранить информацию с аналогичной структурой о различных типах носителей (Media::Book
, Media::Movie
, Media::Music
). Однако каждый из этих подклассов имеет уникальные методы.
# TABLE medias
# string :title
# string :description
# integer :media_type
class Media < ActiveRecord::Base
end
class Media
class Book < Media
def reviews
GoogleBooks.search(name).get_reviews
end
end
class Movie < Media
def reviews
IMDB.search_movies(name).reviews
end
end
class Music < Media
def reviews
Lastfm.search(name).comments
end
def music_video
Youtube.search(name).first.embed_html
end
end
end
Это сработало бы, если бы я использовал Media::Book.new("Harry Potter").reviews
, но я хочу иметь возможность использовать
Media.find("Harry Potter")
=> Media::Book
и
Media.find("Harry Potter").reviews
Я знаю, что для этого нужно использовать media_type
, но я не уверен, есть ли лучший способ сделать это, чем переопределение каждого метода интерфейса базы данных ActiveRecord (User.medias
, find
, find_by_etc
, where
, order
, limit
, all
) и замена каждого из возвращаемых значений.