型号 - > has_many - >两次

时间:2011-05-24 17:15:06

标签: ruby-on-rails model associations has-many has-many-through

所以我在这里有一个有点混乱的关系,在Note,Group和User之间。我最终在模型中使用了has_many两次。但我现在专注于Note&集团关系。

背景:一个小组可以有一个笔记。用户也可以有笔记。这就是我的Note是多态的原因。但是,我还创建了一个名为Tag的连接模型,因此Note可以属于多个组。在我的代码中,我最终得到了多个'has_many:notes'。请参阅下面的所有代码。做这样的事情的正确方法是什么?

提前致谢!

note.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

tag.rb

belongs_to :note
belongs_to :group

1 个答案:

答案 0 :(得分:5)

你只需要给它一个不同的名字。

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

名称必须不同。虽然使用notenotes,但可能不太清楚代码的其他部分之间的区别。