我有两个型号。 user
& rule
和两个不同的案例
user
可以创建rule
user
可以将规则分配给另一个user
对于我正在做的第一种情况:
class User
has_many :rules #owner or the rule
end
class Rule
belongs_to :user
end
对于第二种情况:( rule
也可以应用于其他模型,所以我把它变成多态的)
class User
has_many :rules, as: :rulable #rules applied to the user
end
class Rule
belongs_to :rulable, polymorphic: true
end
现在,如果我想获取用户创建的规则,以及单独应用于用户的规则,我将如何处理它。
答案 0 :(得分:1)
永远不需要将关联名称与模型名称相同,您可以将其定义为其他名称并提及类名称。所以在你的情况下你可以这样做:
class User
has_many :rules #owner or the rule
has_many :rules_applied, as: :rulable, class_name: 'Rule' #rules applied to the user
end
class Rule
belongs_to :user
belongs_to :rulable, polymorphic: true
end
因此user.rules
将返回已创建的规则,user.rules_applied
将返回已应用的规则。
rule.user
将返回所有者,rule.rulable
将返回应用了规则的用户。