0

我对 Rails 还很陌生,多对多的关系让我有点不知所措。在我的应用程序中,aUser有很多并且可以看到其他人的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
4

2 回答 2

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

请注意,Post has_many Tags

如果您担心:

其他用户可以用不同的标签标记同一个帖子,并且只为他们显示

那很好。您将能够这样做,因为与帖子关联的标签属于_属于用户,因此您始终可以执行类似...

@post.tags.each do |tag|
  if tag.user == current_user
   # show tag.
  end
end
于 2013-11-09T00:20:08.417 回答
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 个。顺便说一句,您可以再添加 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
于 2013-11-09T00:30:52.473 回答