我有一个具有职业属性的用户模型。
假设用户可以是footballer
或tennisman
当用户注册时,他选择职业,并可以稍后更改。
我的用户模型包含最常见的属性,例如姓名,地址,重量,联系人信息。 我想将其他特定属性存储在专用模型中,例如footballer_profile,tennissman_profiles
我不能使用多态,因为信息对于单个模型结构来说太不同了。
如何根据我的“User.occupation”属性向我的用户模型声明特定的has_one条件?
这是最好的方式吗? 谢谢你的帮助
答案 0 :(得分:2)
你可以写:
class User < ActiveRecord::Base
enum occupation: [ :footballer, :tennissman ]
self.occupations.each do |type|
has_one type, -> { where occupation: type }, class_name: "#{type.classify}_profile"
end
#..
end
请阅读#enum以了解其工作原理。只需记住,而您将声明属性 enum ,该属性必须是 整数 列。如果您不想使用 enum ,请使用常量。
class User < ActiveRecord::Base
Types = [ :footballer , :tennissman ]
Types.each do |type|
has_one type, -> { where occupation: type.to_s }, class_name: "#{type.classify}_profile"
end
#..
end
答案 1 :(得分:1)
听起来像是我的多态性案例。
class User < ActiveRecord::Base
belongs_to :occupational_profile, polymorphic: true
end
class FootballerProfile < ActiveRecord::Base
has_one :user, as: :occupational_profile
end
通过这种方式,您可以简单地为他们选择的职业建立和关联个人资料。