3

我希望我的用户能够报告其他拥有虚假个人资料、不适当照片、使用辱骂性语言等的用户。我正在考虑创建一个报告类来捕获此活动。我只是不确定这些协会。

例如,每个用户只能举报另一个用户一次。但是很多用户可以报告给定的用户。我该如何实施?

4

1 回答 1

9

您可以拥有一个与其他人具有多态关联的报表模型

class Report < ActiveRecord::Base
  belongs_to :reportable, polymorphic: true
  belongs_to :user
end

class Photo  < ActiveRecord::Base
  has_many :reports, as: :reportable
end

class Profile  < ActiveRecord::Base
  has_many :reports, as: :reportable
end

class User < ActiveRecord::Base
  has_many :reports                 # Allow user to report others
  has_many :reports, as: :reportable # Allow user to be reported as well
end

您的reports表格将包含以下字段:

id, title, content, user_id(who reports this), reportable_type, reportable_id

为了确保一个用户只能报告一种类型的一个实例(假设一个用户只能报告另一个用户的个人资料一次),只需在报告模型中添加此验证

validates_uniqueness_of :user_id, scope: [:reportable_type, :reportable_id]

这些设置应该能够满足要求。

对于验证部分,感谢Dylan Markow 在这个答案

于 2013-05-10T04:00:14.140 回答