结构 rails 关联[用户 -> 一个评论 -> 单个模型]

Structure rails association[user -> one review -> single model]

我有 3 个模型用户、应用和评论

目前我的模型有以下关联

用户 -> has_many :reviewshas_many :apps

审核 -> belongs_to :appbelongs_to :user

应用 -> has_many :reviewsbelong_to :user

这允许用户在一个简单的应用程序模型上创建多个评论

我的问题:如何构建我的模型以便用户可以在单个应用程序模型中仅添加一条评论? 如何确保用户无法向 he/she 创建的应用添加评论?

在您的情况下,只需创建一个表单对象,它将控制验证和创建过程。在这里你可以找到一个表单对象的例子: http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/

您必须在审核模型中创建自定义验证。

validate :user_cannot_be_creator

def user_cannot_be_creator
  errors.add(:user_id, "You are not permited to review") unless user_id != App.find_by(id: app_id).user_id
end

我假设您在应用和评论模型中有 user_id foreign_key,在评论模型中您有 app_id foreign_key.

创建 review/before 保存时,您应该检查用户是否拥有该应用程序 he/she 正在审查

检查rails从头开始投reputation system