Ruby 模型故障中的Rails 3验证

Ruby 模型故障中的Rails 3验证,ruby,ruby-on-rails-3,validation,Ruby,Ruby On Rails 3,Validation,我在task.rb模型中定义了一个validate_完成方法。伪逻辑应该是 if no hazards exist date_completed = Date.today elsif any hazard exists with a risk_total > 1000 date_completed = nil else any hazard that exists has a risk_total =< 1000 date_complete = Date.today e

我在task.rb模型中定义了一个validate_完成方法。伪逻辑应该是

if no hazards exist
  date_completed = Date.today
elsif any hazard exists with a risk_total > 1000
  date_completed = nil
else any hazard that exists has a risk_total =< 1000 
  date_complete = Date.today
end
结束

正如现在一样,如果不存在危险,它会成功地将日期设置为今天。如果我再添加一个危险,它会有效地将日期切换回零。但是,如果存在一种危险,且其总风险低于1000,则该日期保持为零

“鉴于您的危险是静态定义的,而不在数据库中,您可以这样做:

#definition of all the hazard
hazards = [:Fire, :Road, :Fall]
def validate_completion
  # find all the hazards that exist
  exists = hazards.select { |hazard| self.send("#{hazard.to_s}_exist") } 
  # find if at least one high risk hazard exists
  high_risk_total = exists.detect {|hazard| self.send("#{hazard.to_s}_risk_total") > 1000 }
  # find if at least one low rick hazard exists
  low_risk_total = exists.detect {|hazard| self.send("#{hazard.to_s}_risk_total") <= 1000 }

  # validation logic here
end
#所有危险的定义
危险=[:火灾、道路、坠落]
def验证_完成
#找出所有存在的危险
exists=hazards.select{| hazard | self.send(“{hazard.to_s}_exist”)}
#确定是否至少存在一种高风险危险
high|risk|u total=存在。检测{hazard| self.send(“{hazard.to|s}{u risk|u total”)>1000}
#查找是否至少存在一个低风险

low|risk|total=exists.detect{hazard|self.send(“{hazard.to|s}{u risk|total”)你的危险是如何定义的?如果你需要添加一个新的危险,或者删除一个危险,该怎么办?这个条件语句对于读、写和维护来说是一个噩梦。危险是静态的。它们不会被添加或删除。你能建议一种实现同样目标的替代方法吗?我感谢你的帮助。我对RoR非常陌生,我还没有看到代码它是这样的。对于验证逻辑,这些变量的输出到底是什么?我如何检查例如是否不存在?此外,由于日志中的某些原因,它不会告诉我细节,只是该代码有问题。该代码可以在模型中这样运行吗?它似乎不起作用。
#definition of all the hazard
hazards = [:Fire, :Road, :Fall]
def validate_completion
  # find all the hazards that exist
  exists = hazards.select { |hazard| self.send("#{hazard.to_s}_exist") } 
  # find if at least one high risk hazard exists
  high_risk_total = exists.detect {|hazard| self.send("#{hazard.to_s}_risk_total") > 1000 }
  # find if at least one low rick hazard exists
  low_risk_total = exists.detect {|hazard| self.send("#{hazard.to_s}_risk_total") <= 1000 }

  # validation logic here
end