Rails:在三个模型之间添加多态关联

时间:2016-05-23 07:39:20

标签: ruby-on-rails migration associations

我有三种模式:用户,代理商和客户。 目前,

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开发人员。我怎样才能做到这一点?请写一个迁移?

2 个答案:

答案 0 :(得分:1)

您需要在用户模型中添加两​​个字段role_idrole_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.rbapp/models/location.rb。只需从用户中删除belongs_to:,然后将其添加到位置:belongs_to: user