2012-11-15 2 views
0

У меня есть две модели, которые связаны друг с другом.Datamapper: Создайте два отношения (имеет n и имеет 1) к той же модели

class User 
    include DataMapper::Resource 

    property :id, Serial 
    has n, :mail_addresses 
end 

class MailAddress 
    include DataMapper::Resource 

    property :id, Serial 
    property :email, String, :required => true, :unique => true, :format => :email_address 

    belongs_to :user 
end 

Теперь я хочу добавить основной адрес электронной почты для пользователя. Таким образом, можно сделать такие вещи, как

some_user.primary_mail_address = some_user.mail_addresses.first 

Я пытался сделать что-то вроде этого на модели пользователя, но без удачи.

property :primary_mail_address_id, Integer, required: false 
has 1, :primary_mail_address, model: 'MailAddress', parent_key: [:primary_mail_address_id], child_key: [:id] 

выше трюк позволяет мне выполнить пример кода, но primary_mail_address_id не будет обновляться, когда я делаю это.

Как это сделать?

ответ

0

Находит собственное решение.

Проблема в том, что я смутил has 1 с belongs_to. has 1 на самом деле является отношением one_to_many, которое пытается создать свойство на модели MailAddress, а не на модели User.

Трюк был:

belongs_to :primary_mail_address, MailAddress, required: false 

 Смежные вопросы

  • Нет связанных вопросов^_^