Rails中的多个belongs_to模型

时间:2017-04-11 11:09:05

标签: ruby-on-rails

我有一个评论模型,目前正在使用文章。我现在想让用户能够对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

然后我假设我需要一个外键将用户和评论绑在一起,然后还有对文章/咖啡店的评论。

2 个答案:

答案 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/你将不得不使用它不是在实际添加评论表格,而是在幕后。