我有一个 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
)并替换它们的每个返回值更好的方法。