Rails4 - 子模型关联取决于父模型属性
Rails4 - Child model association depending on Parent model attribute
我有一个具有职业属性的用户模型。
假设用户可以是 footballer
或 tennisman
用户注册时选择职业,以后可以更改。
我的用户模型包含最常见的属性,如姓名、地址、体重、联系信息。
我想将其他特定属性存储在专用模型中,例如 footballer_profile、tennissman_profiles
我无法使用多态性,因为单个模型结构的信息差异太大。
如何根据我的 "User.occupation" 属性向我的用户模型声明特定的 has_one 条件?
这是最好的方法吗?
感谢您的帮助
你可以这样写:
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,请使用常量。
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
对我来说这听起来像是多态性的例子。
class User < ActiveRecord::Base
belongs_to :occupational_profile, polymorphic: true
end
class FootballerProfile < ActiveRecord::Base
has_one :user, as: :occupational_profile
end
这样您就可以简单地为他们选择的职业建立和关联档案。
我有一个具有职业属性的用户模型。
假设用户可以是 footballer
或 tennisman
用户注册时选择职业,以后可以更改。
我的用户模型包含最常见的属性,如姓名、地址、体重、联系信息。 我想将其他特定属性存储在专用模型中,例如 footballer_profile、tennissman_profiles
我无法使用多态性,因为单个模型结构的信息差异太大。
如何根据我的 "User.occupation" 属性向我的用户模型声明特定的 has_one 条件?
这是最好的方法吗? 感谢您的帮助
你可以这样写:
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,请使用常量。
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
对我来说这听起来像是多态性的例子。
class User < ActiveRecord::Base
belongs_to :occupational_profile, polymorphic: true
end
class FootballerProfile < ActiveRecord::Base
has_one :user, as: :occupational_profile
end
这样您就可以简单地为他们选择的职业建立和关联档案。