Skip to content

Instantly share code, notes, and snippets.

@riethmayer
Created October 17, 2011 15:07
Show Gist options
  • Save riethmayer/1292816 to your computer and use it in GitHub Desktop.
Save riethmayer/1292816 to your computer and use it in GitHub Desktop.
ruby-1.9.2-p290 :043 > SecureRandom.hex(8)
=> "4935b273ef3ff39b"
ruby-1.9.2-p290 :044 > token = _
=> "4935b273ef3ff39b"
ruby-1.9.2-p290 :045 > Cart.create(:token => token)
SQL (0.7ms) INSERT INTO "carts" ("created_at", "token", "updated_at") VALUES (?, ?, ?) [["created_at", Mon, 17 Oct 2011 15:06:10 UTC +00:00], ["token", "4935b273ef3ff39b"], ["updated_at", Mon, 17 Oct 2011 15:06:10 UTC +00:00]]
=> #<Cart id: 4, token: "4935b273ef3ff39b", created_at: "2011-10-17 15:06:10", updated_at: "2011-10-17 15:06:10">
ruby-1.9.2-p290 :046 > Cart.where(:token => token)
Cart Load (0.3ms) SELECT "carts".* FROM "carts" WHERE "carts"."token" = '4935b273ef3ff39b'
=> []
this works:
ruby-1.9.2-p290 :058 > token = "another simple string"
=> "another simple string"
ruby-1.9.2-p290 :059 > Cart.create(:token => token)
SQL (1.1ms) INSERT INTO "carts" ("created_at", "token", "updated_at") VALUES (?, ?, ?) [["created_at", Mon, 17 Oct 2011 15:14:57 UTC +00:00], ["token", "another simple string"], ["updated_at", Mon, 17 Oct 2011 15:14:57 UTC +00:00]]
=> #<Cart id: 7, token: "another simple string", created_at: "2011-10-17 15:14:57", updated_at: "2011-10-17 15:14:57">
ruby-1.9.2-p290 :060 > Cart.where(:token => token)
Cart Load (0.3ms) SELECT "carts".* FROM "carts" WHERE "carts"."token" = 'another simple string'
=> [#<Cart id: 7, token: "another simple string", created_at: "2011-10-17 15:14:57", updated_at: "2011-10-17 15:14:57">]
ruby-1.9.2-p290 :061 >
and this works too:
ruby-1.9.2-p290 :067 > token = Cart.find(4).token
Cart Load (0.3ms) SELECT "carts".* FROM "carts" WHERE "carts"."id" = ? LIMIT 1 [["id", 4]]
=> "4935b273ef3ff39b"
ruby-1.9.2-p290 :068 > Cart.where("token like ?",token)
Cart Load (0.2ms) SELECT "carts".* FROM "carts" WHERE (token like '4935b273ef3ff39b')
=> [#<Cart id: 4, token: "4935b273ef3ff39b", created_at: "2011-10-17 15:06:10", updated_at: "2011-10-17 15:06:10">]
ruby-1.9.2-p290 :069 >
this was the problem:
ruby-1.9.2-p290 :069 > token.encoding
=> #<Encoding:ASCII-8BIT>
ruby-1.9.2-p290 :070 > Cart.last.token.encoding
Cart Load (0.2ms) SELECT "carts".* FROM "carts" ORDER BY "carts"."id" DESC LIMIT 1
=> #<Encoding:UTF-8>
ruby-1.9.2-p290 :071 >
This is the solution:
SecureRandom.hex(18).force_encoding(Cart.connection.encoding)
This is not required for mysql2, as it forces utf-8 by itself.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment