Итак, я создал простую ERD, и ваша проблема очень проста, но я думаю, что нашел серьезную проблему:
class User < ActiveRecord::Base
has_many :accounts
has_one :primary_account, :class_name => "Account", :primary_key => "account_pimary_id"
end
class Account < ActiveRecord::Base
belongs_to :user
end
Чтобы получить ассоциации как есть, просто установите :primary_key
на has_one :primary_account
, чтобы он использовал users.account_primary_id
вместо users.id
.
Хотя это работает, это, вероятно, не вызовет ничего, кроме проблем. Если user_id
Учетной записи используется в качестве внешнего ключа для id
и account_primary_id
, вы не представляете, является ли Учетная запись обычной Учетной записью или Основной Учетной записью, без явного присоединения к id
и account_primary_id
каждый раз. foreign_key
должен указывать только на 1 столбец, в данном случае на таблицу пользователя id
. Тогда это прямой выстрел в таблицу учетной записи.
@ Решение Zabba является разумным, но для объединения требуется :include
has_one :primary_account, :class_name => "Account", :conditions => "users.primary_account_id = accounts.id", :include => :user
Это означает, что все учетные записи принадлежат пользователю, и только 1 помечается как основная учетная запись. Красиво и прямо, избегая дурацких пунктов где.