Есть ли способ использовать полиморфные ассоциации в обратном порядке, так что я не должны иметь LINK_ID, picture_id и code_id полей мой Стол для сообщений?
has_one
означает, что внешний ключ в другой таблице. Если вы действительно определили свою модель таким образом, то у вас не будет link_id
, picture_id
и code_id
в вашей таблице сообщений. Думаю, вы хотели сказать belongs_to
.
Я хочу сделать что-то вроде @ post.postable и получить объект ребенка , который был бы один из ссылки, изображение или код.
Я считаю, что вы могли бы сделать это с помощью STI и комбинируя links
, pictures
и codes
таблицы, затем проверить тип модели при получении. Это похоже на kludgey, хотя и может закончиться множеством неиспользуемых столбцов.
Есть ли причина не хранить неиспользуемые столбцы id, кроме экономии места? Если вы готовы, чтобы сохранить их, то можно определить виртуальный атрибут и postable_type
столбца: (непроверенный код, могут не зрелищно)
def postable
self.send(self.postable_type)
end
def postable=(p)
self.send(postable_type.to_s+"=",p)
end
Имеет ли смысл иметь фотографию: has_many отношения? Тогда вы могли бы сделать то, что искали. – Trip