Связывание двух моделей по-разному - PullRequest
0 голосов
/ 26 апреля 2018

У меня две модели. 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 голосов
/ 26 апреля 2018

Никогда не нужно иметь имя ассоциации, совпадающее с именем модели, вы можете определить его как-нибудь еще и упомянуть имя класса. Так что в вашем случае вы можете сделать так:

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 вернет пользователя, к которому применено правило.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...