当我查询
Product.find('12aaaa')
我希望它返回零。但是rails正在用Product.find(12)
返回我,我怎么能阻止这种行为呢?
p.s:请不要建议我将我的id列转换为字符串,我显然不会这样做,它被索引并设置为自动增量。而且我觉得将id转换为字符串也不是一个好主意。
谢谢
我希望它返回零
find除了id或id列表,或者一组id作为参数。因此,当传递'12aaaa'
之类的字符串参数时,find
使用to_i
强制它们,除非id
的数据类型是string
。
所以
Product.find('12aaaa') #'12aaaa'.to_i = 12
会变成
Product.find(12)
我怎么能阻止这种行为?
你不能,因为这是一个默认行为。我不建议使用任何类型的猴子修补来更改默认行为。
注意:
当找不到记录时,find
不会返回nil。相反,它提出了一个ActiveRecord::RecordNotFound
例外。而find_by
返回nil