Ruby on rails 验证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
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