如何停止find的默认行为

问题描述 投票:1回答:1

当我查询

Product.find('12aaaa') 

我希望它返回零。但是rails正在用Product.find(12)返回我,我怎么能阻止这种行为呢?

p.s:请不要建议我将我的id列转换为字符串,我显然不会这样做,它被索引并设置为自动增量。而且我觉得将id转换为字符串也不是一个好主意。

谢谢

ruby-on-rails-5
1个回答
1
投票

我希望它返回零

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

© www.soinside.com 2019 - 2024. All rights reserved.