Восстановление полиморфной ассоциации - PullRequest
0 голосов
/ 22 августа 2011

Я исправляю полиморфную ассоциацию, которая была «настроена» в прошлом. Вот подробности.

User.rb has fields:
user_type_id
user_type

Мне нужно User, чтобы принадлежать Company или Employee.

Проблема, с которой я столкнулся, заключается в том, что поля User.rb не названы с использованием соглашения Rails (что-то вроде usable_type и usable_id). Как я могу установить связь, учитывая поля, которые у меня есть?

Ответы [ 2 ]

2 голосов
/ 22 августа 2011

Существует недокументированная опция :foreign_type на belongs_to:

class User < ActiveRecord::Base
  belongs_to :user_type, :polymorphic => true, :foreign_type => 'user_type'
end
0 голосов
/ 22 августа 2011

Проще всего изменить имена полей в соответствии с соглашением Rails: так как полиморфная ассоциация еще не настроена должным образом, и эти поля не должны использоваться ни для чего другого, поэтому у вас не должно быть проблем.

По сути, вам нужно выбрать имя xyz для соответствия следующему

class User < ActiveRecord::Base
    belongs_to :xyz, :polymorphic => true
end

class Employee < ActiveRecord::Base
    has_many :users, :as => :xyz
end

class Company < ActiveRecord::Base
    has_many :users, :as => :xyz
end

, где в вашей пользовательской модели есть поля

User
xyz_id    :integer
xyz_type    :string

Это также сделает для удобства обслуживаниякод позже.

...