首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails |链接共享应用|数据库建模

Rails |链接共享应用|数据库建模
EN

Stack Overflow用户
提问于 2017-03-15 17:13:30
回答 3查看 41关注 0票数 0

我正在尝试通过构建一个链接共享应用来学习Rails。

1)用户可以提交帖子以及对创建该帖子的其他用户的引用。

2)因此,一个帖子属于一个用户(提交了帖子),也属于其他用户(创建了帖子)

目前,我有两张桌子

1)用户2)帖子

代码语言:javascript
运行
复制
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?

代码语言:javascript
运行
复制
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
EN

回答 3

Stack Overflow用户

发布于 2017-03-15 17:42:23

代码语言:javascript
运行
复制
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表中

代码语言:javascript
运行
复制
p = Post.last

p.users =>将返回已创建用户的数组

p.submitted_user =>将返回提交者用户对象

票数 1
EN

Stack Overflow用户

发布于 2017-03-15 18:10:28

是的,您必须创建Post和User Join表,并通过添加关联has_many来在join表上存储额外的数据。

票数 1
EN

Stack Overflow用户

发布于 2017-03-16 21:49:25

我就是这样做的

代码语言:javascript
运行
复制
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

因此,如果我想找出帖子的创建者,我会这样做的

代码语言:javascript
运行
复制
post = Post.first
UserPost.where(post: post).creators

默认情况下,当用户提交post时,将创建该用户的UserPost记录,并且post的枚举状态为0。

当提交者选择帖子的创建者时,将使用该帖子、所选用户和枚举状态1创建UserPost记录

我不确定这是不是最好的方法。如果你想出一个最好的方法,请发表评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42805394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档