#ruby-on-rails #model #associations #has-many #has-many-through
#ruby-on-rails #Модель #ассоциации #имеет-много #имеет много сквозных
Вопрос:
Итак, у меня здесь несколько запутанная взаимосвязь между заметкой, группой и пользователем. И в итоге я дважды использовал has_many в своей модели. Но в настоящее время я сосредоточен на отношениях Note и Group.
Справочная информация: У группы может быть примечание. У пользователя также может быть примечание. Вот почему моя заметка полиморфна. Однако я также создал модель объединения, называемую тегом, чтобы заметка могла принадлежать нескольким группам. Однако в моем коде я получил несколько ‘has_many: notes’. Смотрите весь мой код ниже. Каков был бы правильный способ сделать что-то подобное?
Заранее спасибо!
примечание.rb
belongs_to :notable, :polymorphic => true
has_many :tags
has_many :groups, :through => :tags
user.rb
has_many :notes, :as => :notable
group.rb
has_many :notes, :as => :notable
has_many :tags
has_many :notes, :through => :tags
тег.rb
belongs_to :note
belongs_to :group
Ответ №1:
Вам просто нужно дать ему другое имя.
class Group
has_many :notes, :as => :notable
has_many :tags
has_many :tagged_notes, :class_name => 'Note', :through => :tags
end
Если вам нужно только одно примечание для :as => :notable
части (это было не очень понятно в вашем вопросе), вы могли бы просто сделать это:
class Group
has_one :note, :as => :notable
has_many :tags
has_many :notes, :through => :tags
end
Имена просто должны быть разными. Хотя с note
vs notes
может быть не очень понятно, в чем разница в других частях вашего кода.
Комментарии:
1. Ну, в группе всегда будет много заметок, а не только одна. Что я хочу сделать, так это это. Кто-то может написать заметку, а затем установить некоторые флажки, для каких групп они хотят применить заметку. Таким образом, в группе может быть много заметок, и одна заметка может принадлежать многим разным группам. Имеет ли это больше смысла?
2. Спасибо за ваш ответ, я проверю, как назвать это tagged_note, я думаю, не слишком знаком с этим.