Ruby on rails 确保创建操作在rails中只发生一次

Ruby on rails 确保创建操作在rails中只发生一次,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一种方法,可以检查与某项工作相关的特定产品的当前库存水平是否低于零。如果产品级别确实低于零,则该方法会创建一条注释,提醒用户。我正在从控制器索引操作调用该方法 def check_total_quantities(job_products, job) job_products.each do |job_product| if job.not_confirmed? && job_product.product.available_quanti

我有一种方法,可以检查与某项工作相关的特定产品的当前库存水平是否低于零。如果产品级别确实低于零,则该方法会创建一条注释,提醒用户。我正在从控制器索引操作调用该方法

    def check_total_quantities(job_products, job)
      job_products.each do |job_product|
        if job.not_confirmed? && job_product.product.available_quantity < 0 
          stock_reminder = job.comments.build(body: "There is a stock issue with product '#{job_product.product.title}' in job #{job.title} for client #{job.client.title}. Stock levels might be too low to use this product on this job.",
                          admin_id: job.admin.id,
                          important: true,
                          public: true)
          stock_reminder.save
          return true
        end
      end
    end
def检查总数量(作业产品、作业)
job|U产品。每个do|job|U产品|
如果作业未确认&&作业产品可用数量<0
stock#u提醒=job.comments.build(正文:“客户#{job.client.title}的作业{job.title}中的产品{job#u product.product.title}存在库存问题。库存水平可能太低,无法在此作业中使用此产品。”,
管理员id:job.admin.id,
重要提示:没错,
公众:对)
库存提醒。保存
返回真值
结束
结束
结束

但是,如果我重新加载页面,评论就会重复。我有什么办法可以避免这样的事情发生?我真的希望它只发生一次。

您可以使用Active Record的方法。因此,在您的if条件之后,您可以检查该特定作业的该类型注释是否已经存在,如果不存在,则保存一个新注释(您现在正在执行的操作)。您可以在一个命令中执行这两个步骤。很酷

job.find_or_create_by(job_id: job.id, type: :stock_below_zero)

我认为有必要在诸如type之类的评论中设置一个定义属性,或者在
stock\u follow\u
中设置一个标志,说明该评论是否处于该状态(或是否可视化),以区分同一工作的其他评论。

但如果有其他产品低于零,该怎么办?