以不同方式关联两个模型

时间:2018-04-26 09:38:38

标签: ruby-on-rails ruby

我有两个型号。 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

现在,如果我想获取用户创建的规则,以及单独应用于用户的规则,我将如何处理它。

1 个答案:

答案 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将返回应用了规则的用户。