rails一个表应该有多少个外键

时间:2016-03-21 13:35:55

标签: ruby-on-rails activerecord foreign-keys schema relational-database

我有一个rails4应用程序。我已经拥有了下面的架构,并且会添加post_replies表,belong_to :post_commentpost_commenthas_many :post_replies。评论中的回复将始终属于给定的评论。

我的问题是应该在post_replies中添加多少外键?我将始终只在post index page上显示这些内容,并在format_js添加新回复。 post_reply belongs_to post_comment肯定,但我是否应同时使用belongs_to :userbelongs_to :post

当前架构:

class User < ActiveRecord::Base
  has_many :posts
  has_many :post_comments, through: :posts
end

class Post < ActiveRecord::Base
  has_many :post_comments
  belongs_to :user
end

class PostComment < ActiveRecord::Base
  belongs_to :post
  belongs_to :user
end

计划架构:

class PostReply < ActiveRecord::Base
  belongs_to :post_comment #this is needed for sure
  belongs_to :post #do i need this?
  belongs_To :user #and this?
end

路线:

#current:

resources :posts do
  resources :post_comments, only: [:create, :update, :destroy], module: :posts
end

#and planning to add:

resources :post_comments, only: [] do 
  resources :post_repiles, only: [:create, :update, :destroy], module: :posts
end

2 个答案:

答案 0 :(得分:2)

它应属于用户,但如果它已经属于post_comment则不需要属于该帖子,因为您可以通过该模型访问帖子。

答案 1 :(得分:1)

我认为您应该为PostReply CommentReply命名,因为它是对评论的回复,而不是对帖子的直接回复。

如果您已经有评论ID,则不需要保存post_id,因为评论已经与帖子有关系。

这应该可以正常工作。

class CommentReply < ActiveRecord::Base
  belongs_to :post_comment
  belongs_To :user 
end