在运行 RSpec 和 FactoryGirl 时,它会自动将任何:id
参数转换为 fixnum,而在现实生活中,它会作为字符串传递。代码我有:id
作为复合主键尝试调用 split on 的进程params[:id]
。这会导致异常,如下所示:
NoMethodError:
undefined method 'split' for 234:Fixnum
当试图调用这样的东西时:
@myinstance = MyClass.find(params[:id].split("-").map{|x| x.to_i})
为了解决这个问题,我添加了一个简单的类型检查:
if params[:id].is_a? Fixnum
@myinstance = MyClass.find(params[:id])
else
@myinstance = MyClass.find(params[:id].split("-").map{|x| x.to_i})
end
然而,这并不像我期望的那样工作。该if
语句的计算结果为false
,并且split
仍在尝试,导致相同的错误。Ruby 怎么可能params[:id]
在 " " 逻辑中识别为 Fixnum ,但在语句中else
无法计算到?true
if