记录的Rails验证

时间:2019-02-13 16:04:35

标签: ruby-on-rails ruby validation

我试图在创建时为其中一个模型创建自定义验证,我的验证限制了用户每天创建一条记录。但是我需要添加一个条件,如果其中一个记录属性是唯一的“ 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

我应该在此方法中添加一个参数吗?我在了解如何实现这一点时遇到了麻烦。任何帮助将不胜感激

2 个答案:

答案 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