Я создаю приложение Rails для доступа к устаревшей системе. Модель данных содержит клиентов, которые могут иметь одну или несколько подписок. Подписка всегда принадлежит одному и только одному Заказчику. Хотя это и не нужно, эта ассоциация представлена через объединяющую таблицу «подписки», в которой нет столбца идентификатора:
Column | Type | Modifiers
-----------------+---------+-----------
customer_id | integer | not null
subscription_id | integer | not null
У меня это закодировано как декларации has_and_belongs_to_many в клиенте и подписке
class Customer < Activerecord::Base
has_and_belongs_to_many :subscriptions, :join_table => "subscribes",
:foreign_key => "customer_id", :association_foreign_key => "subscription_id"
end
class Subscription < Activerecord::Base
has_and_belongs_to_many :customers, :join_table => "subscribes",
:foreign_key => "subscription_id", :association_foreign_key => "customer_id"
end
Проблема, с которой я столкнулся, заключается в том, что на каждую подписку может быть только один клиент, а не несколько, и таблица объединения всегда будет содержать не более одной строки с определенным customer_id.
И поэтому я не хочу ассоциацию «клиенты» в подписке, которая возвращает массив (не более одного) клиента, я действительно хочу, чтобы отношение «клиенты» возвращало связанного клиента.
Есть ли способ заставить ActiveRecord сделать это отношение 1 к N, даже если сама таблица соединения, по-видимому, делает это отношение N-к-М?
- Thomas