我有一个评论模型,目前正在使用文章。我现在想让用户能够对Coffeeshop评论发表评论。我可以使用相同的评论表,还是应该有一个单独的评论表(感觉很笨拙)。我已经很久没有使用RoR(几周)了,所以仍然试图掌握基础知识。
我会将它们嵌套在routes.rb(以及如何)
中 resources :coffeeshops do
resources :articles do
resources :comments
end
或
resources :coffeeshops do
resources :comments
end
resources :articles do
resources :comments
end
我的模特看起来像:
用户
class User < ApplicationRecord
has_many :comments
end
评论
class Comment < ApplicationRecord
belongs_to :user
belongs_to :article
belongs_to :coffeeshop
end
文章
class Article < ApplicationRecord
has_many :comments, dependent: :destroy
end
咖啡店
class Coffeeshop < ApplicationRecord
has_many :comments, dependent: :destroy
然后我假设我需要一个外键将用户和评论绑在一起,然后还有对文章/咖啡店的评论。
答案 0 :(得分:6)
我使用多态关联。
http://guides.rubyonrails.org/association_basics.html#polymorphic-associations
class User < ApplicationRecord
has_many :comments
end
class Comment < ApplicationRecord
belongs_to :user
belongs_to :commentable, polymorphic: true
end
class Article < ApplicationRecord
has_many :comments, as: :commentable
end
class Coffeeshop < ApplicationRecord
has_many :comments, as: :commentable
end
有关设置路由/控制器的更多信息:
https://rubyplus.com/articles/3901-Polymorphic-Association-in-Rails-5 http://karimbutt.github.io/blog/2015/01/03/step-by-step-guide-to-polymorphic-associations-in-rails/
答案 1 :(得分:0)
您可以对文章和咖啡店的注释使用注释模型,但是(因为默认情况下rails使用ID作为主键和外键我假设您也使用ID)您必须在注释表中添加列,您可以在其中设置注释类型(您可以在注释模型中创建枚举器,您可以在其中设置2种可能的值类型,每种类型都适用于文章和咖啡店模型)。如果你没有添加列,它将导致奇怪的,难以追踪的错误,你可以看到关于具有相同id的咖啡店的文章的评论,反之亦然。
UPD:关于使用轨道模型的枚举的小指南:http://www.justinweiss.com/articles/creating-easy-readable-attributes-with-activerecord-enums/你将不得不使用它不是在实际添加评论表格,而是在幕后。