Руководства по Rails являются одними из лучших, поэтому я бы посоветовал вам начать читать о Полиморфные ассоциации
Ваши объявления классов выглядят нормально, и я предполагаю, что вы тоже переносите. Но только ради этого. Допустим, это выглядит так:
class CreateComment < ActiveRecord::Migration
def change
create_table :comments do |t|
t.string :name
t.references :commentable, :polymorphic => true
# this is the equivalent of
# t.integer :commentable_id
# t.string :commentable_type
t.timestamps
end
end
end
Нет, если у вас есть объект Article
или Photo
и вы хотите получить комментарии для этого объекта, тогда предложение Тило верно. Все, что вам нужно сделать, это: @jims_photo.comments
Если, с другой стороны, у вас есть экземпляр модели Comment
, вы можете получить родителя следующим образом: @comment.commentable
. Но если вы хотите получить фото комментарии Джима, лучше всего так. В противном случае вы должны будете указать в качестве аргументов :commentable_id
и commentable_type
. Я не знаю ни одного искателя, который расширяет полиморфный объект в поля commentable_id
и commentable_type
для вас.
Но вы всегда можете создать метод класса для этого:
def self.find_by_parent(parent)
where(:commentable_id => parent.id, :commentable_type => parent.class.name)
end