Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 On Rails 4_Params - Fatal编程技术网

Ruby on rails 验证Rails中的参数类型

Ruby on rails 验证Rails中的参数类型,ruby-on-rails,ruby-on-rails-4,params,Ruby On Rails,Ruby On Rails 4,Params,我已经到处找了,我想知道我是否做错了什么。再核实一下,我会问你们的 所以我在Rails控制器中接收params。一个键、值对是:status=>true/false。然而,我发现当我试图以字符串形式发布状态时 :status=>“这不是布尔值” 然后在我的控制器中创建我的对象,我的对象的:status属性变为false 因此,rails中是否有任何干净的方法来验证my:status是否对应于布尔值 谢谢 这种非常奇怪的方法会使这个把戏失败 def is_boolean?(item) !!it

我已经到处找了,我想知道我是否做错了什么。再核实一下,我会问你们的

所以我在Rails控制器中接收
params
。一个
键、值
对是
:status=>true/false
。然而,我发现当我试图以字符串形式发布
状态时

:status=>“这不是布尔值”

然后在我的控制器中创建我的对象,我的对象的
:status
属性变为
false

因此,rails中是否有任何干净的方法来验证my
:status
是否对应于布尔值


谢谢

这种非常奇怪的方法会使这个把戏失败

def is_boolean?(item)
  !!item == item
end

params[:status] = 'some string'
is_boolean?(params[:status])
# => false

params[:status] = true
is_boolean?(params[:status])
# => true
更直观一点的版本是

def is_boolean?(item)
  item == false || item == true
end
如果你只在某个地方做一次,但在其他地方继续做/重复,我建议你创建
to\u bool
方法。i、 e

class String
   def to_bool
    return true if self == true || self =~ (/(true|t|yes|y|1)$/i)
    return false if self == false || self.blank? || self =~ (/(false|f|no|n|0)$/i)
    raise ArgumentError.new("invalid value for Boolean: \"#{self}\"")
   end
end
并将此方法放入Initializer或库中。而且,你可以简单地做到这一点

 Mymodel.new(status: params[:status].to_s.to_bool)

我们之所以对_
执行
,只是因为在
状态
键不在
参数
中的情况下,将
nil
转换为
'

验证

要做到这一点,需要在模型中进行验证:

#app/models/model.rb
类模型
--

MVC

原因有两方面:

  • 干燥
  • MVC
  • 如果您想让应用程序保持干燥,您需要确保在整个过程中只有一个对验证的引用。称为,这意味着如果您尝试用其他控制器/方法填充模型,您仍然会调用相同的验证


    第二,你需要考虑。MVC是Rails的一个核心方面,这意味着您只能使用控制器来整理数据—在模型中拉取和编译数据。验证也是如此——始终确保使用数据(即模型中的数据)保存验证。

    Nice-I+1'd for Ingenuit何时需要获取数据?
    #app/models/model.rb
    Class Model < ActiveRecord::Base
       validates :status, inclusion: { in: [true, false] }, message: "True / False Required!"
    end