我有User
和Post
个型号。以这种方式设置:
User
has_many: :posts
Post
belongs_to :user
我正在尝试添加Bookmark
模型,以便单个用户可以为多个帖子添加书签。
我正在考虑最好的方法来做到这一点。
我看到this线程寻址a在同一个模型上有很多关联,答案是使用has_many: :through =>
并重命名关联,但我主要担心的是这会让我感到非常困惑。我永远不会说@ post.posts,所以我不喜欢甚至写下这个协会。
目前,我正在这样做......
User
has_many :posts
has_many :bookmarks
Bookmark
belongs_to :user
belongs_to :post
Post
belongs_to :user
has_many :bookmarks
我没有使用:through
,:source
,:as
或任何奇特的魔法。
对我而言,它清楚地说明了这些关联是什么,而不是过于复杂。我是通过这种方式错过了(任何Rails语法糖)的确切查询或特征,没有那么多额外的魔力吗?
答案 0 :(得分:0)
用户有一个书签,一个书签指向到一个帖子(另一种思考方式),一个人自己的帖子在概念上与他们的书签没什么关系,因为它们可能重合或者他们可能没有。我认为书签表只是一个简单的
表| id | user_id | post_id |
你可能在想它。是的,它看起来像一个连接表,但实际上它也应该有'created_at'和'updated_at':
| id | user_id | post_id | created_at | updated_at |
用户has_many书签,并且单个书签属于用户。书签也属于帖子和帖子(可能)has_many书签。
这为您提供了您可能需要的方法:
@user.bookmarks
@post.bookmarks
@bookmark.post
@bookmark.user
@bookmark.post.users
最后一个为您提供了为某个用户添加书签的特定帖子加书签的所有用户。通过这种方式,您可以获取特定用户的书签,并找到也为该帖子添加书签的其他用户。这可能是一种简单的方法,例如:
@bookmark.post.users.count
这可以用在一个用户书签列表中,告诉他们有多少其他人也为同一个帖子添加了书签。
请记住,您不需要任何关联。这只是给你一堆查询作为方法。它主要是“糖”。没有它们你就可以顺利过来,但是你必须自己编写所有这些方法。