我正在尝试通过构建链接共享应用来学习Rails。
1)用户可以提交帖子以及对创建该帖子的其他用户的引用。
2)因此,帖子属于用户(提交者)以及其他用户(创建帖子)
目前,我有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
答案 0 :(得分:1)
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.last
p.users
=&gt;将返回已创建用户的数组
p.submitted_user
=&gt;将返回提交者用户对象
答案 1 :(得分:1)
是的,您必须创建Post和User Join表,并添加关联has_many以在连接表上存储其他数据。
答案 2 :(得分:0)
我这样做了
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
默认情况下,当用户提交帖子时,将创建该用户和帖子的UserPost记录,其枚举状态为0.
当提交者选择帖子的创建者时,将使用该帖子,所选用户和枚举状态1创建UserPost记录
我不确定这是不是最好的方法。如果您想到这样做的最佳方式,请发表评论。