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