我正在尝试通过构建一个链接共享应用来学习Rails。
1)用户可以提交帖子以及对创建该帖子的其他用户的引用。
2)因此,一个帖子属于一个用户(提交了帖子),也属于其他用户(创建了帖子)
目前,我有两张桌子
1)用户2)帖子
class User < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :submitted_user, class_name: 'User', foreign_key: 'user_id'
#belongs to multiple other users who have created the post#
end我是否应该使用has_many through并创建一个具有user_id和post_id的连接表PostCreators。在这种情况下,Can I write multiple has_many :posts?
class User
has_many :posts #submitted_user in post
has_many :posts, through: :post_creators
end
class Post
belongs_to :submitted_user, class_name: 'User', foreign_key: 'user_id'
has_many :creators, through: :post_creators
end
class PostCreator
belongs_to :user
belongs_to :post
end发布于 2017-03-15 17:42:23
class User < ActiveRecord::Base
has_many :user_posts
has_many :posts, through: :user_posts
end
class Post < ActiveRecord::Base
belongs_to :submitted_user, class_name: 'User', foreign_key: 'submitted_user_id'
has_many :user_posts
has_many :posts, through: :user_posts
end
class UserPost < ActiveRecord::Base
belongs_to :user
belongs_to :post
end还要编写一个迁移,将submitted_user_id添加到Post表中
p = Post.lastp.users =>将返回已创建用户的数组
p.submitted_user =>将返回提交者用户对象
发布于 2017-03-15 18:10:28
是的,您必须创建Post和User Join表,并通过添加关联has_many来在join表上存储额外的数据。
发布于 2017-03-16 21:49:25
我就是这样做的
class User < ActiveRecord::Base
has_many :user_posts
has_many :posts, through: :user_posts
end
class Post < ActiveRecord::Base
has_many :user_posts
has_many :users, through: :user_posts
end
class UserPost < ActiveRecord::Base
belongs_to :user
belongs_to :post
enum status: { submitter: 0, creators: 1 }
end因此,如果我想找出帖子的创建者,我会这样做的
post = Post.first
UserPost.where(post: post).creators默认情况下,当用户提交post时,将创建该用户的UserPost记录,并且post的枚举状态为0。
当提交者选择帖子的创建者时,将使用该帖子、所选用户和枚举状态1创建UserPost记录
我不确定这是不是最好的方法。如果你想出一个最好的方法,请发表评论。
https://stackoverflow.com/questions/42805394
复制相似问题