Rails4 - 子模型关联取决于父模型属性

Rails4 - Child model association depending on Parent model attribute

我有一个具有职业属性的用户模型。 假设用户可以是 footballertennisman 用户注册时选择职业,以后可以更改。

我的用户模型包含最常见的属性,如姓名、地址、体重、联系信息。 我想将其他特定属性存储在专用模型中,例如 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

这样您就可以简单地为他们选择的职业建立和关联档案。