将值设置为nil?

时间:2016-05-03 21:30:54

标签: ruby-on-rails ruby

我在Ruby遇到了一个问题,我似乎无法在网上找到答案。
我有一些表单,其中一个表单,如果没有输入任何内容,我会尝试将age的值设置为nil
这是我现在所拥有的相关部分:

puts "What is #{name}'s estimated age?"
age = gets.to_i

    def set_nils
        age = nil if age.blank?
    end

我尝试了一些不同的想法,但似乎没有任何改变我的最终输出(只是打印年龄)。

1 个答案:

答案 0 :(得分:2)

问题在于,如果您不输入任何内容作为输入并将此\n转换为整数,则该值将变为0,因为:

irb(main):008:0> '\n'.to_i
=> 0

因此,您应该改为:

puts "What is #{name}'s estimated age?"
input = gets.to_i
@age = input > 0 ? input : nil

def set_nils
    @age ||= nil
end

有效年龄(> 0)的输出:

irb(main):001:0> name = "Tim"
=> "Tim"
irb(main):002:0> puts "What is #{name}'s estimated age?"
What is Tim's estimated age?
=> nil
irb(main):003:0> input = gets.to_i
8
=> 8
irb(main):004:0> @age = input > 0 ? input : nil
=> 8
irb(main):005:0>
irb(main):006:0* def set_nils
irb(main):007:1>     @age ||= nil
irb(main):008:1> end
=> nil
irb(main):009:0> set_nils
=> 8

年龄无效的输出(< 0):

irb(main):017:0> name = "Tim"
=> "Tim"
irb(main):018:0> puts "What is #{name}'s estimated age?"
What is Tim's estimated age?
=> nil
irb(main):019:0> input = gets.to_i
-1
=> -1
irb(main):020:0> @age = input > 0 ? input : nil
=> nil
irb(main):021:0>
irb(main):022:0* def set_nils
irb(main):023:1>     @age ||= nil
irb(main):024:1> end
=> nil
irb(main):025:0> set_nils
=> nil
相关问题