Встраивание внешних ключей в Rails Active Model Serializer

Я знаю, что при встраивании ассоциаций мы можем сделать следующее

has_many :task_observer, embed: :objects


has_many :task_observer, embed: :ids

Есть ли способ встроить в ассоциацию другое поле, отличное от идентификатора, например, contact_id или task_name в качестве массива вместо первичного ключа? Пожалуйста, дай мне знать.


person Madhan    schedule 13.03.2013    source источник
comment
Я не совсем уверен в том, что вы хотите, но мне нравится писать сериализатор для связанного объекта. В вашем случае это будет сериализатор для модели TaskObserver. Затем has_many будет использовать этот сериализатор для сериализации всех моделей. Это дает вам полный контроль над тем, какие поля вы хотите сериализовать. Но я не уверен, что это то, что вы ищете.   -  person pjam    schedule 13.03.2013
comment
embed: :ids дает мне массив идентификаторов task_observer, например, task_observers: [ 22, 20, 18 ] Если я добавлю сериализатор для модели TaskObserver и ограничу атрибуты, я получу что-то вроде этого: task_observers: [ { contact_id: 22 }, {идентификатор_контакта: 20}, {идентификатор_контакта: 18}]   -  person Madhan    schedule 13.03.2013
comment
а это вас не устраивает? Я имею в виду, что мне кажется хорошей идеей иметь здесь хэши, чтобы вы знали, с какими идентификаторами вы работаете. Потому что, если у вас есть просто список, он теряет свою первоначальную цель. Нет ?   -  person pjam    schedule 14.03.2013


Ответы (2)


Что, если бы вы сделали что-то вроде:

attributes :task_observer_contact_ids

def task_observer_contact_ids
  object.task_observers.map(&:contact_id)
end

Это то, что вы ищете?

person pjam    schedule 13.03.2013

embed_key еще лучше

has_many :task_observer, embed: :ids, embed_key: :custom_id_field_name
person Trond Hatlen    schedule 22.08.2014