【发布时间】:2015-08-13 16:35:17
【问题描述】:
我有一个 Assignment 模型 belongs_to 模型 Device
在创建分配行之前,我需要验证相应设备的布尔值是否设置为 true,否则创建将失败。如何做到这一点?
【问题讨论】:
-
你能试试我的答案吗?它应该工作。如果没有,请告诉我。我会更新答案。
标签: ruby-on-rails ruby-on-rails-3 activerecord associations
我有一个 Assignment 模型 belongs_to 模型 Device
在创建分配行之前,我需要验证相应设备的布尔值是否设置为 true,否则创建将失败。如何做到这一点?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activerecord associations
您可以使用Rails custom validation 根据设备的boolean_attribute 验证您的Assignment 模型。
在您的 Assignment 模型中,添加此自定义验证器:
validate :true_device_attribute
然后,在同一个Model中定义validator方法:
def true_device_attribute
unless device.boolean_attribute
errors.add(:boolean_attribute, "Device's boolean_attribute Must be True")
end
end
默认情况下,每次调用 valid? 时都会运行此类验证。
您还可以控制何时运行自定义验证器。如果您只想在creating 和assignment 时执行验证,则可以将:on :create 选项传递给validate 方法,如下所示:
validate :true_device_attribute, on: :create
那么验证只会在您尝试createAssignment 记录时运行。不适用于update。
默认情况下,它适用于create 和update。
查看Rails Official Documentation for Validations Custom Methods 了解更多信息。
【讨论】:
class Assignment < ...
validate :check_device_boolean_value
def check_device_boolean_value
errors.add(:your_boolean_value, "must to boolean") unless devise.your_boolean_value
end
【讨论】: