Ruby on rails RubyonRails 2.3.8:功能测试:参数中的数字不作为字符串传递?

Ruby on rails RubyonRails 2.3.8:功能测试:参数中的数字不作为字符串传递?,ruby-on-rails,ruby,Ruby On Rails,Ruby,注*我使用的是Factory_girl,不确定这在这里是否重要 目前,我做以下工作来准备发表一篇文章: p = Factory.build(:le_object, :template_id => t.id.to_s) 请注意,我有意将其转换为字符串 然后我就做你的普通帖子: post :create, :le_object => p.attributes 但是,可疑的是,当我查看测试日志时,我看到: Parameters: {"action"=>"create",

注*我使用的是Factory_girl,不确定这在这里是否重要

目前,我做以下工作来准备发表一篇文章:

  p = Factory.build(:le_object, :template_id => t.id.to_s)
请注意,我有意将其转换为字符串

然后我就做你的普通帖子:

  post :create, :le_object => p.attributes
但是,可疑的是,当我查看测试日志时,我看到:

Parameters: {"action"=>"create", ... "template_id"=>0, ... }
请注意,id不是字符串

现在,这会弄乱控制器,因为我在该字段上执行了
not.empty?
检查(因为它是可选的),然后控制器中的该方法会执行完全不同的操作

这在应用程序中运行良好,当它实际运行时,对于相同的方法,控制台在开发/生产中输出:

Parameters: {"action"=>"create", ... "template_id"=>"1"...}
注意这里的1是一个字符串,因为它来自一个表单,而在HTTP中,一切都是字符串

这就是我的代码中失败的地方,特别是:

if not params[:le_object][:template_id].nil? and not params[:le_object][:template_id].empty?
目前的问题是,在测试中,因为它传递的是一个数字,而不是字符串表示,所以我得到的错误
undefined方法为空?对于#:Fixnum


所以。。。如何更改代码(测试或其他)以使其正常工作?

Rails在
对象上定义了
.blank?
方法,这意味着它可以处理任何东西(字符串、数字等)。
.blank?
的定义非常简单:

respond_to?(:empty?) ? empty? : !self

它将默认使用
empty?
,但如果对象上不存在该方法,它将只调用
!self
。如果项目为
nil
,则为
!nil
将计算为
true

为什么不直接使用
.blank?
,如果项目为
nil
或为空字符串,则返回true。字符串没有.blank?。但这将是同一个问题。数字没有。空白?方法。这是怎么回事?因为!”“还有!“text”都返回false。然后我需要返回两个不同的东西。这就是我使用blank的原因。因为在HTML中,所有内容都是字符串,“”必须被视为与nil相同。例如,4.empty?返回未定义的方法。与blank相同。在Rails中,
4.blank?
返回
false
,而不是未定义的方法。你的控制器真的不应该在意它是以字符串还是数字的形式出现,只要调用
params[:template\u id].blank?
它就会返回
true
,如果参数不存在或者它是一个空字符串,当它是
0
或者
“0”
时它就会返回false。对不起,兄弟。你一定在说rails的一个版本不是2.3.8,因为我不是妄想症。4.空白?是FixedNum的未定义方法。空的也一样。我在想,也许测试框架中发生了一些奇怪的事情。。。。idk=\
.blank?
自Rails 2.0.0以来一直存在。非常奇怪的是,
4.blank?
不起作用——你肯定是在Rails中这样做的,而不仅仅是在IRB提示符中?