2

我正在尝试为我的用户创建不同的配置文件类型。

我有一个用户模型。

User类型有一个Profile相关的,所以它has_one :profile但是,Page类型有一个Page相关的,所以它has_one :page

但是,我User对两者都使用同一张表,并且我正在设置帐户类型。

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

编辑

用户模型 has_one :profile Profile belongs_to :user Page belongs_to :user 账户类型要么是“User”(进入 Profile 模型),要么是“Page”(进入 Page 模型)。

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 模型和 User 模型。

4

1 回答 1

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
于 2013-02-09T21:51:43.323 回答