gpt4 book ai didi

ruby - Rails“是否有可能知道在验证方法中执行的操作(更新、创建)?

转载 作者:太空宇宙 更新时间:2023-11-03 18:30:06 25 4
gpt4 key购买 nike

平台:轨道3.0数据库:mysql 5.1

业务需求:产品一次只能发出一件。退回已发出的元素后,可以发出相同产品的新元素。一次可以发出来自不同产品的多个项目。

为了实现上述业务需求,我正在检查是否已在同一日期范围内为同一产品发出商品(通过检查我下面的位置是否存在日期重叠)。

     class Item < ActiveRecord::Base
validate :validate_one_item_for_product
def validate_one_item_for_product
items = Item.where( "issue_date < ? and return_date > ? and product_id = ?", return_date, issue_date, product_id)
errors.add( :base, "item already issued for this product, not returned yet") if items.size > 0
end
end

上面定义的验证在创建时工作正常,但在更新的情况下我需要实现不同的逻辑。我不想为相同的要求定义两种方法。所以我想根据函数是更新还是创建操作来实现检查。有什么方法可以知道触发验证的操作是更新还是删除?

最佳答案

简单的解决方案是定义一个方法来验证它,带一个参数,然后用不同的 :on => 调用进行两次验证,然后调用带参数的第一个方法。

此外,如果有帮助,您可以使用 new_record?,它会告诉您对象是否正在创建(在保存之前)

关于ruby - Rails“是否有可能知道在验证方法中执行的操作(更新、创建)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5400028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com