У меня есть много ко многим, в Rails настроена ассоциация с ActiveRecord.Скажем, таблицы
+------------+ +----------------+ +----------+
| categories | -- has many -= | category_items | =- has many -- | products |
+------------+ +----------------+ +----------+
В таблице category_items у меня есть стандартный набор идентификаторов плюс дополнительный атрибут с именем "type":
id:int
category_id:int
product_id:int
category_type:string
К счастью, Rails предоставляет несколько отличных помощников.для выполнения задания в таблице сопоставления на одном дыхании.Например:
p = Product.first # p.id => 1
c = Category.first # c.id => 1
# now to make the assignment
p.categories << c
# or
p.categories.create(c)
Это все хорошо, но, скажем, я хочу автоматически обновить поле «тип» именем класса другой таблицы.Поэтому для приведенных выше примеров моя строка category_items будет выглядеть так:
id = 1 (or some number)
category_id = 1
product_id = 1
category_type = nil
Но я бы хотел, чтобы category_type равнялся «Product».Есть ли способ для меня создать обратный вызов или определить что-то в ассоциации, которая автоматически установит поле category_type?Я знаю, что в полиморфных ассоциациях вы можете использовать что-то вроде: source или: as, чтобы сделать что-то подобное, но полиморфные ассоциации во многих ассоциациях приводят к ошибке.
Любые идеи?
Спасибо!