我有一个模型“WorkDetail”和与问题相关的db-attrs是'name','status'和'approved_status',数据类型为all integer,模型类定义如下: -
class WorkDetail < ActiveRecord::Base
enum name: [:smartcheck, :install, :verify]
enum status: [:pending, :inprogress, :complete]
belongs_to :work_order
has_many :cabinets
after_save :work_order_status_update
private
def work_order_status_update
work_detail_count = self.work_order.work_details.count
status_array = self.work_order.work_details.where(status: 2).count
if status_array == work_detail_count
if work_detail_count == 0
self.work_order.update({status: "pending"})
else
self.work_order.update({status: "complete"})
end
else
self.work_order.update({status: "inprogress"})
end
end
end
现在,我想添加自定义验证以应用于以下问题: -
验证应仅适用于更新过程。
如果对象的name == "smartcheck"
和status == "complete"
只有approved_status
布尔属性应为updated
到true
(
迁移时默认值为false),否则应该给出错误
smartchecked,尝试更新时状态不完整
approved_status attr。
希望这个问题有道理,谢谢!事先人们,Happy Coding。
答案 0 :(得分:0)
1)验证应仅适用于更新过程
after_save :work_order_status_update, :on => :update
2)如果对象的名称==“smartcheck”且状态==“完成”则仅 approved_status布尔属性应更新为true( 迁移时默认值为false),否则应该给出错误 smartchecked,尝试更新时状态不完整 approved_status attr。
def test_status_and_name
if self.name == "smartcheck" and self.status == "complete"
self.update_attributes(approved_status: true)
else
errors[:base] << "smartchecked and the status is not complete on trying to update approved_status attr."
end
end