2016-05-23 4 views
0

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

class User < ActiveRecord::Base 
    has_one :agency 
    has_one :client 
end 

class Client < ActiveRecord::Base 
    belongs_to :users 
end 

class Agency < ActiveRecord::Base 
    belongs_to :users 
end 

Я хочу изменить ассоциации и создать полиморфные ассоциации, такие как это:

User belongs_to :role , :polymorphic => true 

и

Client has_one :user, as: :role 
Agency has_one :user, as: :role 

Я разработчик начинающих рельсы. Как я могу это достичь? HOw написать миграцию?

ответ

1

В пользовательской модели вам нужно добавить два поля: role_id и role_type. Вы можете создать новую миграцию следующий

rails g migration addNewFieldsToUsers role_id:integer role_type:string 

rake db:migrate После запуска вам необходимо изменить ассоциации следующего

class User < ActiveRecord::Base 
    belongs_to :role, polymorphic: true   
end 

class Client < ActiveRecord::Base 
    has_one :user, as: :role, class_name: 'User' 
end 

class Agency < ActiveRecord::Base 
    has_one :user, as: :role, class_name: 'User' 
end 

Теперь перезапустите сервер рельсы.

0

Миграция не требуется. В базе данных нет никаких связей между моделями (что изменило бы миграцию).

Что вам нужно сделать, это изменить модели app/models/user.rb и app/models/location.rb. просто удалите пользователя belongs_to: и добавьте его в виде: belongs_to: user.

+0

На самом деле я отредактировал свой вопрос .. может у ответить? Извините, что раньше не задавал должного вопроса. – Abhishek

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