我试图在创建时为其中一个模型创建自定义验证,我的验证限制了用户每天创建一条记录。但是我需要添加一个条件,如果其中一个记录属性是唯一的“ job_id”,则用户可以每天创建多个记录。
我的用户类别
class CareGiver < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable, :confirmable
validates_presence_of :phone, :city, :state, :street, :zip, presence: true, on: :create
has_many :hours do
def today
where(:created_at =>(Time.zone.now.beginning_of_day..Time.zone.now))
end
end
end
每个小时的记录都有一个“ job_id”。我希望用户能够每天创建一条正在运行的记录。但是,如果“ job_id”是唯一的,并且没有记录任何时间。我希望他们能够创建记录。
记录即时创建时间(小时)
class Hour < ApplicationRecord
belongs_to :care_giver
validate :hours_for_the_day, :on => :create
private
def hours_for_the_day
if care_giver.hours.today.count >= 1
errors.add(:base, "Exceeds daily limit")
end
end
end
我应该在此方法中添加一个参数吗?我在了解如何实现这一点时遇到了麻烦。任何帮助将不胜感激
答案 0 :(得分:0)
也许您想在Hour上有一个worker_on date字段并提供唯一的验证?
您实际上是想限制某人每天输入一个小时记录还是将他们限制为具有唯一日期的一个小时记录?
class CareGiver < ApplicationRecord
devise ...
has_many :hours
validates_presence_of :phone, ..., presence: true, on: :create
end
class Hour
validates_uniqueness_of :worked_on
end
答案 1 :(得分:0)
好,所以我(错误地)假定当前正在使用job_id来引用Job模型。但是由于不是这样,因此添加另一个验证来检查Hour模型中的job_id唯一性应该不会太困难。我尚未对此进行测试,但我认为这应该可行。
#other code
validate :unique_job_id, :on => :create
private
def unique_job_id
if Hour.where(job_id: job_id).any?
#errors
end
end
#other stuff