簡體   English   中英

Rails:如何根據父母的屬性驗證模型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM