Ruby on rails 根据用户类型有一个关系
我正在尝试为我的用户创建不同的配置文件类型 我有一个用户模型Ruby on rails 根据用户类型有一个关系,ruby-on-rails,has-one,Ruby On Rails,Has One,我正在尝试为我的用户创建不同的配置文件类型 我有一个用户模型 Usertype有一个Profile相关,所以它有一个:Profile但是,Pagetype有一个Page相关,所以它有一个:Page 但是,我使用相同的User表来处理这两个问题,并且我正在设置帐户类型 我想知道,如何根据我的用户帐户类型确定这种关系 编辑 用户模型有一个:配置文件配置文件所属:用户页面所属:用户帐户类型为“用户”(转到配置文件模型)或“页面”(转到页面模型) class用户'这里应该是profile或PAGE' 结
User
type有一个Profile
相关,所以它有一个:Profile
但是,Page
type有一个Page
相关,所以它有一个:Page
但是,我使用相同的User
表来处理这两个问题,并且我正在设置帐户类型
我想知道,如何根据我的用户帐户类型确定这种关系
编辑
用户模型有一个:配置文件配置文件所属:用户页面所属:用户帐户类型为“用户”(转到配置文件模型)或“页面”(转到页面模型)
class用户'这里应该是profile或PAGE'
结束
类配置文件
我读了一些API,发现:class_name,现在我的挑战是动态确定它
编辑
编辑了一点页面模型和用户模型。也许一个
proc
可以工作
class User < ActiveRecord::Base
TYPES = { 'user' => 'Profile', 'page' => 'Page' }
has_one :profile, :class_name => proc { TYPES[self.type].constantize }
end
class用户'Profile','page'=>'page'}
has_one:profile,:class_name=>proc{TYPES[self.type].constantize}
结束
如果这个工作考虑添加一个表来存储用户类型:
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
class用户'Profile','page'=>'page'}
has_one:profile,:class_name=>proc{TYPES[self.type].constantize}
属于:用户类型
结束
类UserType
请发布您的模型及其关联。“帐户类型”是指“配置文件”吗?用户模型有一个:配置文件属于:用户页面属于:用户帐户类型要么是“用户”(转到配置文件模型),要么是“页面”(转到页面模型)我读了一些API,发现:class\u name,现在我的挑战是动态地确定它。如果我理解正确,一个用户
有一个属性帐户类型
,它是页面
或用户配置文件
?的一个实例!但是,在页面模型中,没有一个:页面。你可以看到我对我的主要帖子所做的更改。提前谢谢你的帮助!那么,如何确定用户
的帐户类型是页面
还是用户档案
?设置用户帐户类型的条件是什么?可能是条件验证也会这样做。:)但是多态性在这种情况下确实是一个很好的选择。是的,但它不应该是另一种方式吗?对不起,我的英语有时限制了我。页面或配置文件属于用户,而不是相反。我尝试了lambda,并将其添加到用户模型:has_one:Profile,:class_name=>(lambda{return TYPES[self.type]})中,看起来它正在发挥作用。但我现在的问题是,Rails如何决定使用什么?我不知道:)你可以提出一个新的问题。考虑把你找到的答案贴在你的问题上,以备将来参考。
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