Ruby on rails RubyonRails 2.3.8:功能测试:参数中的数字不作为字符串传递?
注*我使用的是Factory_girl,不确定这在这里是否重要 目前,我做以下工作来准备发表一篇文章: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",
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提示符中?