has_one关系取决于用户类型

时间:2013-02-09 21:01:39

标签: ruby-on-rails has-one

我正在尝试为我的用户创建不同的个人资料类型。

我有一个用户模型。

User类型与Profile相关,因此has_one :profilePage类型与Page相关,因此has_one :page < / p>

但是,我正在为两者使用相同的User表,我正在设置帐户类型。

我想知道,如何根据我的用户帐户类型确定该关系

修改

用户模型has_one:个人资料个人资料belongs_to:用户页面belongs_to:用户帐户类型是“用户”(转到配置文件模型)或“页面”(转到页面模型)。

class User < ActiveRecord::Base
  has_one :profile, :class_name => 'Here it should be either PROFILE or PAGE'
end

class Profile < ActiveRecord::Base
  belongs_to :user
end

class Page < ActiveRecord::Base
  belongs_to :user
end

我一直在阅读API,并发现:class_name,现在我的挑战是动态确定它。

修改

编辑了一下Page模型和用户模型。

1 个答案:

答案 0 :(得分:1)

也许proc有效?

class User < ActiveRecord::Base
  TYPES = { 'user' => 'Profile', 'page' => 'Page' }
  has_one :profile, :class_name => proc { TYPES[self.type].constantize }
end

如果这有效,请考虑添加一个表来存储用户类型:

class User < ActiveRecord::Base
  TYPES = { 'user' => 'Profile', 'page' => 'Page' }
  has_one :profile, :class_name => proc { TYPES[self.type].constantize }
  belongs_to :user_type
end

class UserType < ActiveRecord::Base
  has_many :users
end