Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails包含验证_Ruby On Rails_Ruby_Arrays_Validation - Fatal编程技术网

Ruby on rails Rails包含验证

Ruby on rails Rails包含验证,ruby-on-rails,ruby,arrays,validation,Ruby On Rails,Ruby,Arrays,Validation,我正在努力获得一个包含验证来处理一个模型,所以也许有人可以告诉我这里缺少什么 这是我的模型: class Order < ActiveRecord::Base ORDER_TYPES = %w{ Verkooporder Retourorder } ORDER_TYPES.each_with_index do |meth, index| define_method("#{meth}?") { type == index } end validates_inclu

我正在努力获得一个包含验证来处理一个模型,所以也许有人可以告诉我这里缺少什么

这是我的模型:

class Order < ActiveRecord::Base

  ORDER_TYPES = %w{ Verkooporder Retourorder }

  ORDER_TYPES.each_with_index do |meth, index|
    define_method("#{meth}?") { type == index }
  end
  validates_inclusion_of :order_type, :in =>  %w{ Verkooporder Retourorder }
  ...
我将其保存到我的模型中,如下所示:

@order.order_type =   params[:order][:order_type]
因此,当我保存订单模型时,它总是无法验证订单类型。 有人能指出我做错了什么吗


PS:order类型在我的模型中是一个整数值字段。

问题是您正在将方法
Verkooporder?
Retourorder?
定义为字符串数组,但不会从验证中调用它们,因为
:in
正在将
%w{Verkooporder Retourorder}
解释为字符串数组,即
“Verkooporder”、“Retourorder”]

您实际需要验证的是,
order\u type
是一个介于0和
order\u type
数组大小之间的数字,即一个值介于0和1之间的字符串:

validates_inclusion_of :order_type, :in => %w{ 0 1 }
在这种情况下,您实际上不需要定义布尔
Verkooporder?
Retourorder?
方法,除非您在其他地方需要它们

更新:

我现在意识到,您的表单将在
order::order\u TYPES
中以字符串形式返回
order\u type
,这与上面的验证不起作用,因为上面的验证是对整数值字符串进行验证


我过去这样做的方式不是为
order\u type
使用整数,而是一个字符串。在这种情况下,您可以使用
validates\u inclusion\u进行验证:order\u type、:in=>order\u TYPES
,并且选择下拉菜单不必更改。您使用
order\y的整数值字段有什么特殊原因吗pe
?或者,您可以为每个订单类型选择返回整数值。

如果您正在使用Rails 3,也可以尝试使用新的Rails 3验证样式。
验证:订单类型,:包含=>{:in=>%w(0 1)}
validates_inclusion_of :order_type, :in => %w{ 0 1 }