如何停止find的默认行为

时间:2018-09-17 07:12:21

标签: ruby-on-rails-5

查询时

Product.find('12aaaa') 

我希望它返回nil。 但是Rails用Product.find(12)返回了我 如何停止这种行为?

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

谢谢

1 个答案:

答案 0 :(得分:1)

  

我希望它返回nil

find,除了 id ID列表,或 ID数组作为参数。因此,当传递诸如'12aaaa'之类的 string自变量时,find使用to_i 强制,除非{{1}的数据类型}是id

所以

string

将成为

Product.find('12aaaa') #'12aaaa'.to_i = 12
  

如何停止这种行为?

您不能这样做,因为这是默认行为。而且,我不建议使用任何 monkey-patching 更改默认行为。

注意:

找不到记录时,

Product.find(12) 不返回nil 。相反,它引发一个find异常。而ActiveRecord::RecordNotFound返回find_by