我的一个控制器中的更新操作中有一个if语句。它看起来像这样:
if !@bid.attributes.values.include?(nil)
build(@bid.id)
end
在构建出价报告之前,我正在检查Bid对象中是否有任何零值属性。我知道构建方法工作正常,因为它在未包含在if语句中时构建报告。当它包含在这个if语句中时,它不会运行。我检查过以确保对象中没有nil值。我进入rails控制台,所有属性都有非零值。另外,我可以在视图中检查这一点,以确认没有零值。
我也试过写作:
build(@bid.id) unless @bid.attributes.values.include?(nil)
以及其他几个变种。没有人允许构建运行。
答案 0 :(得分:1)
您的代码似乎很好,我认为这是您的数据而不是问题。最有可能的是,假设这是一个活动记录实例,该属性为id
,在新记录保存之前,该属性为nil
。
当您在if
之前添加此行时,您会在终端中获得什么?
puts @bid.attributes.to_yaml
你应该能够看到什么是价值,什么没有。而且我很确定这些值中至少有一个是nil
。
我建议更明确地确定哪些字段是必需的。这正是验证的目的。
class Person < ActiveRecord::Base
validates :name, presence: true
end
您明确验证每个字段,以便在缺少时,您会收到一条非常具体的错误消息,说明原因:“人名不能为空。”所以不要想知道为什么它不会保存,而是告诉你为什么它无法保存。