结构rails关联[user - >一篇评论 - >单一型号]

时间:2016-10-18 11:55:11

标签: ruby-on-rails ruby associations

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

目前我的模型有以下关联

用户 - > has_many :reviewshas_many :apps

评论 - > belongs_to :appbelongs_to :user

App - > has_many :reviewsbelong_to :user

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

我的问题:如何构建我的模型,以便用户只能在一个应用模型中添加一个评论? 如何确保用户无法将评论添加到他/她创建的应用程序中?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您必须在评论模型中创建自定义验证。

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

我认为你在app和审核模型中有user_id foreign_key,在审核模型中你有app_id foreign_key。

答案 2 :(得分:0)

在创建评论/保存之前,您应该检查用户是否不拥有他/她正在审核的应用

从头开始检查导轨reputation system