导轨|链接共享应用程序|数据库建模

时间:2017-03-15 09:13:30

标签: ruby-on-rails database

我正在尝试通过构建链接共享应用来学习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

3 个答案:

答案 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记录

我不确定这是不是最好的方法。如果您想到这样做的最佳方式,请发表评论。