rails if控制器中的语句 - 检查nil

时间:2014-04-18 17:39:27

标签: ruby-on-rails ruby null

我的一个控制器中的更新操作中有一个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)

以及其他几个变种。没有人允许构建运行。

1 个答案:

答案 0 :(得分:1)

您的代码似乎很好,我认为这是您的数据而不是问题。最有可能的是,假设这是一个活动记录实例,该属性为id,在新记录保存之前,该属性为nil

当您在if之前添加此行时,您会在终端中获得什么?

puts @bid.attributes.to_yaml

你应该能够看到什么是价值,什么没有。而且我很确定这些值中至少有一个是nil


我建议更明确地确定哪些字段是必需的。这正是验证的目的。

class Person < ActiveRecord::Base
  validates :name, presence: true
end

您明确验证每个字段,以便在缺少时,您会收到一条非常具体的错误消息,说明原因:“人名不能为空。”所以不要想知道为什么它不会保存,而是告诉你为什么它无法保存。