现在我发现ActiveRecord的查询太灵活了。即:
MaintenanceOrder.where(id:" 1 ")
=> [#<MaintenanceOrder id: 1...]
MaintenanceOrder.where(id:"1.2")
=> [#<MaintenanceOrder id: 1...]
MaintenanceOrder.where(id:"1/2")
=> [#<MaintenanceOrder id: 1...]
MaintenanceOrder.where(id:"x")
=> []
MaintenanceOrder.where(id:"? ")
=> []
如果传递给id
的内容是由除整数和空格以外的任何内容组成的字符串(删除了任何前导0),我希望只找到b的记录。显然我可以使用正则表达式在查询之前解决这个问题,但我想知道是否有一些Rails方法可以自动执行此操作。这样,我就能做到这样的事情:
object = MaintenanceOrder.where(id: some_id)
if object.exists?
...
而不是做这样的事情
if some_id is invalid
...
else MaintenanceOrder.where(id:some_id)
答案 0 :(得分:0)
而不是在哪里可以使用find方法。来自文档:&#34;如果主键是整数,则按id查找使用to_i&#34;
强制其参数Person.find(1) # returns the object for ID = 1
Person.find("1") # returns the object for ID = 1
Person.find("31-sarah") # returns the object for ID = 31
http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find
答案 1 :(得分:0)
这应该有效:
[1] pry(main)> User.where('id like ?', " 22878 ")
User Load (65.4ms) SELECT `users`.* FROM `users` WHERE (id like ' 22878 ')
=> []
VS.
[2] pry(main)> User.where('id like ?', 22878)
User Load (69.9ms) SELECT `users`.* FROM `users` WHERE (id like 22878)
=> [#<User:0x0000000ad69070
id: 22878,
....
您必须检查any?
而不是present?
或在first
结果上应用where
。