我对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
答案 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