在用户特定的帖子标记方面有很多关联

时间:2013-11-08 23:46:10

标签: ruby-on-rails ruby has-many-through polymorphic-associations tagging

我对Rails相当陌生,多对多的关系有点过头了。在我的应用中,User有很多,可以看到其他人Posts。他们可以通过添加Tag对每个帖子进行分类 - 每个帖子只需一个。其他用户可以使用不同的标记标记相同的帖子,并且只显示它们。

如何在Rails中建立这种关系?

class User < ActiveRecord::Base
   has_many :tags

class Post < ActiveRecord::Base
   has_one :tag, :through => :user # correct?

class Tag < ActiveRecord::Base
   belongs_to :user
   has_many :posts

2 个答案:

答案 0 :(得分:1)

如果我理解正确,我想你想要这样:

class User < ActiveRecord::Base
   has_many :tags

class Post < ActiveRecord::Base
   has_many :tags, :through => :user

class Tag < ActiveRecord::Base
   belongs_to :user
   has_many :posts

注意,发布has_many标签

如果您担心:

  

其他用户可以使用不同的标记标记相同的帖子并显示   只是为了他们

这很好。您可以这样做,因为与帖子 belongs_to 关联的标签与用户相关,因此您可以随时执行以下操作...

@post.tags.each do |tag|
  if tag.user == current_user
   # show tag.
  end
end

答案 1 :(得分:1)

你可以用这种方式写它

class User < ActiveRecord::Base
  has_many :tags
  has_many :posts, through: :tags

class Post < ActiveRecord::Base
  has_many :tags

class Tag < ActiveRecord::Base
  belongs_to :user
  belongs_to :post

所以每个帖子都有很多标签,但每个用户只有1个。顺便说一句,你可以再添加一个模型来存储标签和用户单独标记

class User < ActiveRecord::Base
  has_many :user_tags
  has_many :tags, through: :user_tags
  has_many :posts, through: :user_tags

class Post < ActiveRecord::Base
  has_many :user_tags

class Tag < ActiveRecord::Base
  has_many :user_tags

class UserTags < ActiveRecord::Base
  belongs_to :user
  belongs_to :tag
  belongs_to :post