Ruby on rails 如何将用户输入与对象属性匹配
我给了一些对象各种属性。然后我想显示属性与用户输入匹配的对象:Ruby on rails 如何将用户输入与对象属性匹配,ruby-on-rails,ruby,object,input,properties,Ruby On Rails,Ruby,Object,Input,Properties,我给了一些对象各种属性。然后我想显示属性与用户输入匹配的对象: Car = Struct.new( :model, :color, :number_doors) matrix = Car.new( matrix, blue, 4) fit = Car.new( fit, silver, 2) volvo = Car.new( volvo, silver, 4) cars = [matrix, fit, volvo] puts "What color car do you want?" re
Car = Struct.new( :model, :color, :number_doors)
matrix = Car.new( matrix, blue, 4)
fit = Car.new( fit, silver, 2)
volvo = Car.new( volvo, silver, 4)
cars = [matrix, fit, volvo]
puts "What color car do you want?"
response = gets.chomp
# something like
# if response == cars[X].color
# puts "We have #{cars[X].model} available
首先,您应该将参数作为
String
传递以创建对象
matrix=Car.new('matrix','blue',4)
fit=Car.new('fit','silver',2)
volvo=Car.new('volvo','silver',4)
(0...cars.length).each do |x|
if response == cars[x].color
puts "We have #{cars[x].model} available"
end
end
首先,您应该将参数作为
String
传递以创建对象
matrix=Car.new('matrix','blue',4)
fit=Car.new('fit','silver',2)
volvo=Car.new('volvo','silver',4)
(0...cars.length).each do |x|
if response == cars[x].color
puts "We have #{cars[x].model} available"
end
end
假设您正确创建了
汽车实例:
matrix = Car.new(:matrix, :blue, 4)
然后可以使用Array#any?
方法检查数组中的任何元素的计算结果是否为true:
cars.any? { |car| car.color.to_s == response }
# returns true or false
因此,您的代码将变成:
puts "We have #{cars[x].model} available" if cars.any? { |car| car.color.to_s == response }
假设您正确创建了汽车实例:
matrix = Car.new(:matrix, :blue, 4)
然后可以使用Array#any?
方法检查数组中的任何元素的计算结果是否为true:
cars.any? { |car| car.color.to_s == response }
# returns true or false
因此,您的代码将变成:
puts "We have #{cars[x].model} available" if cars.any? { |car| car.color.to_s == response }
首先让我们明确这些参数(matrix
,blue
等)必须是字符串或符号。事实上,它们是变量,而且由于之前没有对它们进行定义,因此代码中会出现一些未定义变量XXX
错误
此外,当你写下这样的东西时:
matrix = Car.new( matrix, blue, 4)
cars = [ { model: 'matrix', color: 'blue', doors: 4}, {model: 'fit', color: 'silver', doors: 2}, { model: 'volvo', color: 'silver', doors: 4} ]
puts "What color car do you want?"
response = gets.chomp
cars.each{ |car| puts "We have #{car[:model]} available" if car[:color] == response }
cars = get_cars_data
您有一个循环定义,因为在外部定义的矩阵
取决于先前在内部定义的矩阵
您的代码应该类似于:
matrix = Car.new( matrix, blue, 4)
cars = [ { model: 'matrix', color: 'blue', doors: 4}, {model: 'fit', color: 'silver', doors: 2}, { model: 'volvo', color: 'silver', doors: 4} ]
puts "What color car do you want?"
response = gets.chomp
cars.each{ |car| puts "We have #{car[:model]} available" if car[:color] == response }
cars = get_cars_data
请注意,您不需要为每辆可用的汽车指定名称。如果从大型数据库中读取可用的汽车,这将是不可能的,而在上面的解决方案中(使用哈希数组存储汽车数据),这不会是一个问题
这就引出了一个“大局建议”:永远不要考虑硬编码可能会改变的事情。
在这种情况下,如果您考虑过基于此代码的实际应用程序,您将如何维护您的汽车更新,必须手动插入每辆新车,最糟糕的是,为其实例找到不同的名称
按照我上面介绍的方式,如果从数据库中读取您的汽车,您只需编写如下内容:
matrix = Car.new( matrix, blue, 4)
cars = [ { model: 'matrix', color: 'blue', doors: 4}, {model: 'fit', color: 'silver', doors: 2}, { model: 'volvo', color: 'silver', doors: 4} ]
puts "What color car do you want?"
response = gets.chomp
cars.each{ |car| puts "We have #{car[:model]} available" if car[:color] == response }
cars = get_cars_data
其中get_cars_data是一种读取数据库的方法。唯一的要求是,此方法将每辆车返回为带有:model
,:color
和:doors
键的散列。首先,让我们明确这些参数(矩阵
,蓝色
等)必须是字符串或符号。事实上,它们是变量,而且由于之前没有对它们进行定义,因此代码中会出现一些未定义变量XXX
错误
此外,当你写下这样的东西时:
matrix = Car.new( matrix, blue, 4)
cars = [ { model: 'matrix', color: 'blue', doors: 4}, {model: 'fit', color: 'silver', doors: 2}, { model: 'volvo', color: 'silver', doors: 4} ]
puts "What color car do you want?"
response = gets.chomp
cars.each{ |car| puts "We have #{car[:model]} available" if car[:color] == response }
cars = get_cars_data
您有一个循环定义,因为在外部定义的矩阵
取决于先前在内部定义的矩阵
您的代码应该类似于:
matrix = Car.new( matrix, blue, 4)
cars = [ { model: 'matrix', color: 'blue', doors: 4}, {model: 'fit', color: 'silver', doors: 2}, { model: 'volvo', color: 'silver', doors: 4} ]
puts "What color car do you want?"
response = gets.chomp
cars.each{ |car| puts "We have #{car[:model]} available" if car[:color] == response }
cars = get_cars_data
请注意,您不需要为每辆可用的汽车指定名称。如果从大型数据库中读取可用的汽车,这将是不可能的,而在上面的解决方案中(使用哈希数组存储汽车数据),这不会是一个问题
这就引出了一个“大局建议”:永远不要考虑硬编码可能会改变的事情。
在这种情况下,如果您考虑过基于此代码的实际应用程序,您将如何维护您的汽车更新,必须手动插入每辆新车,最糟糕的是,为其实例找到不同的名称
按照我上面介绍的方式,如果从数据库中读取您的汽车,您只需编写如下内容:
matrix = Car.new( matrix, blue, 4)
cars = [ { model: 'matrix', color: 'blue', doors: 4}, {model: 'fit', color: 'silver', doors: 2}, { model: 'volvo', color: 'silver', doors: 4} ]
puts "What color car do you want?"
response = gets.chomp
cars.each{ |car| puts "We have #{car[:model]} available" if car[:color] == response }
cars = get_cars_data
其中get_cars_data是一种读取数据库的方法。唯一的要求是,此方法将每辆车返回为带有:model
,:color
和:doors
键的散列。首先,您必须注意矩阵
,蓝色
,适合
,银色
,沃尔沃
。。。所有这些参数都应该是字符串(“矩阵”)或符号(:矩阵)。例如,现在定义矩阵的方式取决于循环依赖中的自身。欢迎使用堆栈溢出。我建议阅读“”,包括链接的页面,尤其是那些很长但非常有用的页面。我们不在乎你是新来的,我们想要问得好的问题。首先,你必须注意矩阵
,蓝色
,适合
,银色
,沃尔沃
。。。所有这些参数都应该是字符串(“矩阵”)或符号(:矩阵)。例如,现在定义矩阵的方式取决于循环依赖中的自身。欢迎使用堆栈溢出。我建议阅读“”,包括链接的页面,尤其是那些很长但非常有用的页面。我们不在乎你是不是新手,我们想要的是问得很好的问题。在这种情况下,为了得到完整的回答,你应该向OP展示如何创建一款车型汽车
。如果您按照显示OP的方式运行代码,您将得到cars.rb:8:in
':未初始化常量Car(namererror),因为Ruby不会识别任何名为Car`的对象,除非您之前在某个地方定义了它。在这种情况下,要获得完整的响应,您应该向OP显示如何创建模型Car
。如果您按照显示OP的方式运行代码,您将得到cars.rb:8:in
':未初始化的常量Car(namererror),因为Ruby不会识别任何名为Car`的对象,除非您之前在某个地方定义了它。在这种情况下,要获得完整的响应,您应该向OP显示如何创建模型Car。如果按照显示OP的方式运行代码,则会得到cars.rb:8:in':未初始化