我有三种模式:用户,代理商和客户。 目前,
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
我是新手rails开发人员。我怎样才能做到这一点?请写一个迁移?
答案 0 :(得分: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
现在重启rails服务器。
答案 1 :(得分:0)
不需要迁移。数据库中的模型之间没有关联(迁移会发生变化)。
您需要做的是更改模型app/models/user.rb
和app/models/location.rb
。只需从用户中删除belongs_to:
,然后将其添加到位置:belongs_to: user
。