确保创建操作仅在rails中发生一次

时间:2014-08-14 18:56:41

标签: 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_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

但是,如果我重新加载页面,评论会重复出现。有什么方法可以避免这种情况发生?我只想让它发生一次。

1 个答案:

答案 0 :(得分:1)

您可以使用Active Record的find_or_create_by方法。因此,在if条件之后,您可以检查该特定作业的该类型的评论是否已经存在,如果没有,请保存一个新评论(您现在正在做的事情)。您可以在一个命令中执行这两个步骤。很酷。

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

我认为有必要在评论中设置定义属性,例如类型或其他内容,或者标记stock_below_zero,说明该评论是否在该条件下(或是否可视化以区分同一工作的其他评论。