注意*我正在使用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?
检查(因为它是可选的),然后控制器中的那个方法完全不同。
这在应用程序中工作正常,当它实际运行时,对于相同的方法,控制台在dev / production中输出:
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 method empty? for #:Fixnum
那么......我如何更改我的代码(测试或其他方式)以便我可以使用它?
答案 0 :(得分:0)
Rails在.blank?
上定义了Object
方法,这意味着它适用于任何事物(字符串,数字等)。.blank?
的定义非常简单:
respond_to?(:empty?) ? empty? : !self
默认使用empty?
,但如果该对象上不存在该方法,则只会调用!self
。如果该项目为nil
,则!nil
将评估为true
。