[英]How to validate existence of parent id in child model in Rails for nested attributes
[英]Rails: How do I validate model based on parent's attributes?
我有三個名為Metric,Entry和Measurement的模型:
class Metric < ActiveRecord::Base
has_many :entries
attr_accessible :name, :required_measurements, :optional_measurements
end
class Entry < ActiveRecord::Base
belongs_to :metric
has_many :measurements
attr_accessible :metric_id
end
class Measurement < ActiveRecord::Base
belongs_to :entry
attr_accessible :name, :value
end
它們是關聯的,我可以這樣創建每種的嵌套實例:
bp = Metric.create(:name => "Blood Pressure", :required_measurement_names => ["Diastolic", "Systolic"])
bp_entry = bp.entries.create()
bp_entry.measurements.create({:name => "Systolic", :value =>140}, {:name => "Diastolic", :value =>90})
如何基於Metric模型中的:required_measurement_names
屬性驗證血壓測量值? 例如,如何確保僅輸入“收縮壓”和“舒張壓”作為測量值?
是否有更好的方法來設置這些關聯和驗證?
謝謝!
入口似乎是Measurement和Metric之間的聯接模型。 因此進行驗證很有意義。
為了確保涵蓋所有必需指標
def validate_required_measurements
metric.required_measurements.each{ |requirement|
unless (measurements.map{|measurement| measurement.name}.includes requirement)
errors.add_to_base "required measurement #{requirement} is missing"
end
}
end
為了確保僅包含接受的指標(假設也接受了可選指標)。
def validate_accepted_measurements
measurements.each{ |measurement|
unless ((metric.required_measurements + metric.optional_measurements).include measurement.name )
errors.add_to_base "invalid measurement #{measurement.name} for metric"
end
}
end
放在一起將以上和以下內容添加到Entry模型中
validate: validate_accepted_measurements, :validate_required_measurements
注意:我的Ruby有點生銹,因此不能保證在復制和粘貼后都能正常工作,但是它應該使您足夠接近以解決漏掉的語法錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.