地方でリモートワーク in Iwate

東京の受託開発会社でリモートワークしてます。

Rails、Rubyでstringのbooleanをboolean型に直すメソッドはない!?

スポンサーリンク

いろいろ探したのですが、ないようです。

きっかけはAPIリクエスト

APIサーバーをRailsで作っている時にURLクエリパラメータで、GETメソッドをbooleanを送信してました! こんな感じです。

192.168.33.20/api/v1/products.json?liked=true&product_categories=1,2

controllerで処理する時にprams[liked]を判定するのに、いちいち正規表現で判定しないといけないみたいです。paramsでとるとstring型になっちゃうみたいですね。。

POSTリクエストはboolean型でOK

POSTで投げた場合は、もちろんboolean型でOKです。

default valueを与えた時のRailsの挙動

logを見た時に知ったのですが、default valueと同じ値を投げた時はinsert文の該当する部分が投げられていなく、余計なSQLが投げられないようになっているんですね。そこらへんも自動で判定してくれるRailsはすごいですね。

 Parameters: {"name"=>"test 1", "profile"=>"test", "email"=>"user1hogehogehoge@test2.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "sex"=>"male", "birth_date"=>"2000-01-01 00:00:00", "agreement"=>"1", "telephone_number"=>"000-1111-2222", "address1"=>"住所1", "address2"=>"住所2", "status"=>"active", "push_notice"=>true, "pay_type"=>"CreditCard", :user=>{"name"=>"test 1", "profile"=>"test", "email"=>"user1hogehogehoge@test2.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "sex"=>"male", "birth_date"=>"2000-01-01 00:00:00", "agreement"=>"1", "telephone_number"=>"000-1111-2222", "address1"=>"住所1", "address2"=>"住所2", "status"=>"active", "push_notice"=>true, "pay_type"=>"CreditCard"}}
# "push_notice" => trueが投げられている
Unpermitted parameter: status
  User Exists (3.1ms)  SELECT  1 AS one FROM `users` WHERE `users`.`email` = BINARY 'user1hogehogehoge@test2.com' LIMIT 1
   (0.1ms)  BEGIN
  CACHE (0.0ms)  SELECT  1 AS one FROM `users` WHERE `users`.`email` = BINARY 'user1hogehogehoge@test2.com' LIMIT 1
   (0.3ms)  SELECT COUNT(*) FROM `users` WHERE `users`.`authentication_token` = 'A8Wxby3Nvmxzgdzb1T7F'
  SQL (0.5ms)  INSERT INTO `users` (`email`, `encrypted_password`, `name`, `agreement`, `profile`, `sex`, `telephone_number`, `birth_date`, `address1`, `address2`, `pay_type`, `status`, `authentication_token`, `created_at`, `updated_at`) VALUES ('user1hogehogehoge@test2.com', '$2a$11$wgkia6F9Mj4M3IR4BGnMTOrEwfsIXYNZbUxfleNSCsVeBNiupE/BO', 'test 1', 1, 'test', 1, '000-1111-2222', '2000-01-01', '住所1', '住所2', 0, 1, 'A8Wxby3Nvmxzgdzb1T7F', '2016-08-24 07:45:58', '2016-08-24 07:45:58')
# insert文ではpush noticeがない!