Без изменения какого-либо кода вы сможете:
mix_clip = clip.mix_clips.first(:mix => mix, :clip => clip)
для доступа к записи о присоединении, связанной с вашими ресурсами mix
и clip
.
В настоящее время в DM есть ошибка, которая делает ненадежным выполнение следующих действий без каких-либо дополнительных мер:
mix_clip = clip.mix_clips.get(mix.id, clip.id)
Это потому, что DM забывает порядок, в котором были определены отношения, и, таким образом, в настоящее время не может достоверно знать, в каком порядке метод .get
должен принимать компоненты первичного ключа.
Вы можете обойти это, определив свойства внешнего ключа явно в вашей модели соединения, например, так (обратите внимание, что вам все равно придется явно объявить отношения):
class MixClip
include DataMapper::Resource
property :id, Serial
property :order, Integer
property :mix_id, Integer, :key => true
property :clip_id, Integer, :key => true
belongs_to :mix
belongs_to :clip
end
Это гарантирует, что DM знает, что .get
принимает первичный ключ как (mix_id, clip_id)
, так что теперь вы можете звонить
mix_clip = clip.mix_clips.get(mix.id, clip.id)
Причина, по которой вы хотите это сделать, заключается в том, что при вызовах .get
учитывается карта идентификации, которая, в зависимости от ваших характеристик доступа, может обеспечить более высокую производительность.