2013-05-15 2 views
1

Я новичок в общей сложности DataMapper, и есть две модели:DataMapper- можно ли избежать промежуточных таблиц?

class ThirdPartyAccount 
    include DataMapper::Resource 
    property :access_token,  String, :length => 500 
    belongs_to :user 
end 

class User 
    include DataMapper::Resource 
    property :id,   Serial 
    property :first_name, String 
    has n, :third_party_accounts, :through => Resource 
end 

Глядя на журналы SQL, по-видимому, чтобы создать два tables- users, third_party_accounts и third_party_account_users присоединиться к двум. Кажется, что последняя таблица не нужна - наверняка, таблица third_party_account просто должна использовать поле user_id для отображения непосредственно на таблицу user? Я случайно создал отношения «многие ко многим» здесь?

ответ

1

Это из-за этой линии:

has n, :third_party_accounts, :through => Resource

:through => Resource говорит DataMapper к тому, что это «есть-и-относится ко многим» отношения (каждый третий счет Лицо принадлежит множеству пользователей и каждого пользователя имеет несколько сторонних учетных записей), для чего требуется промежуточная таблица. Если это просто есть-многие (каждый пользователь имеет много 3rd счетов партии, но каждый счет только принадлежит одному пользователю), вы должны просто использовать:

Class User 
    ... 
    has n, :third_party_accounts 
end 

Смотрите http://datamapper.org/docs/associations.html для получения дополнительной информации.

+0

Отлично, спасибо. Не знаю, где я раньше читал материал '' Resource''', хотя я хорошо знаю SQL и большинство языков, очевидно, что для DataMapper, по-видимому, все еще есть какая-то семантика. – Alastair