Can’t this be mitigated by using the bang-variant? i.e. `find_by_id!` ?

On Mon, Nov 10, 2014 at 8:03 AM, Eugene Gilburg <eugene.gilb...@gmail.com>
wrote:

> Current behavior:
> User.find_by_id(nil)
> User Load (1.1ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" IS 
> NULL LIMIT 1
> User.find_by_id("")
> User Load (0.6ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = 0 
> LIMIT 1
> I realize it's hard to always be able to tell whether given parameter can 
> exist or not, but above cases seem like pretty obvious, and also the most 
> common cases (e.g. accepting blank param from request), or chaining queries 
> where previous query returned nil.
> Interestingly enough, User.find(nil) raises right away without queries, but 
> not User.find_by_id(nil).
> I noticed my code often ends up like:
> User.find_by_id(id) if id.present?
> This seems like unnecessary cruft that the app should in many cases know on 
> its own, at least in following cases:
>    - Looking up nil on column which has NOT NULL constraint.
>    - Looking up blank string on integer db field (common when passing 
>    request param to query). This will be casted to 0, but unlike explicit 
>    find_by_id(0), which theoretically could exist in db via manual insertion, 
>    I think it's safe to assume that anyone passing blank string to find_by_id 
>    and friends should expect it to be treated as nil and not 0.
> Could Rails check the db schema and know whether nil/blank values are 
> possible in db? If not, it could short-circuit or use NullScope to avoid 
> making unnecessary query.
> Thanks!
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Core" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to rubyonrails-core+unsubscr...@googlegroups.com.
> To post to this group, send email to rubyonrails-core@googlegroups.com.
> Visit this group at http://groups.google.com/group/rubyonrails-core.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to