包含评论和帖子的类别

时间:2018-01-13 16:42:42

标签: ruby-on-rails ruby

我不明白如何创建这是关系和路线。 我想为Category创建评论,对于帖子,它必须在Category#index和post #index pages中创建。

这是我的代码

category.rb

has_many :posts
has_many :comments, through: :posts

comment.rb

belongs_to :category
belongs_to :post    

post.rb

belongs_to :category
has_many :comments, through: :category

我的迁移似乎是

create_posts.rb

class CreatePosts < ActiveRecord::Migration[5.1]
 def change
  create_table :posts do |t|
   t.integer :category_id
   t.string :name
   t.string :content
   t.string :file

   t.timestamps
  end
 end
end

我不明白如何创建路线...以显示关于帖子和类别的评论......

这是我的路线

route.rb

resources :categories do 
resources :posts

如何建立良好的人际关系,良好的路线?我不明白......如何创建这个模型来建模关系以及我必须在迁移中创建的字段......

2 个答案:

答案 0 :(得分:0)

您是否想要它,以便可以为帖子或类别创建评论?在这种情况下,它听起来像多态关联(http://guides.rubyonrails.org/association_basics.html#polymorphic-associations)的工作。您的关联看起来像这样:

class Comment < ActiveRecord::Base
  belongs_to :commentable, polymorphic: true
end

class Post < ActiveRecord::Base
  has_many :comments, as: :commentable
end

class Category < ActiveRecord::Base
  has_many :comments, as: :commentable
end

这样一个帖子和类别都可以有很多注释,并且注释本身只与其中一个相关联(因此,可评论的数据库列不仅要存储引用ID,commentable_id,而且它引用的模型类型commentable_type - 上面的文档链接在数据迁移方面有更多内容。)

如果帖子与类别相关联(包含许多帖子的类别,以及包含多个类别的帖子),并且您希望根据类别中的帖子显示某个类别的评论,那么您的代码会看起来有点像像这样:

class Comment < ActiveRecord::Base
  belongs_to :post
end

class Post < ActiveRecord::Base
  has_many :comments
  has_and_belongs_to_many :categories
end

class Category < ActiveRecord::Base
  has_and_belongs_to_many :posts
  has_many :comments, through: :posts
end

为此,您还需要对名为:categories_posts的表进行数据库迁移,该表将将帖子和类别映射到一起,而无需在两者之间建立模型。有关详情,请参阅http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association

希望有所帮助!

答案 1 :(得分:0)

根据您的查询,您需要在评论表中添加category_id和post_id。通过在评论表中添加多态关联来实现此目的的正确方法。 Go-rails在rails comments with polymorphic association

上发布了类似的教程