DBの負荷を考えると必要なカラムだけ取得したいので、そのやり方を調べました。
まずはrailsのバージョンを確認
$ bundle exec rails -v Rails 4.1.4
DBの中身はこんな感じです。
mysql> select * from sometest3s where id=2; +----+------+--------------------------------------------------------------------------------------------+----------+---------------------+ | id | name | content | view_flg | ins_date | +----+------+--------------------------------------------------------------------------------------------+----------+---------------------+ | 2 | john | {"shop_id"=>[100, 200, 300], "item_id"=>[500, 600, 700, 800], "name"=>"jon", "user"=>2000} | 0 | 2014-08-20 02:17:17 | +----+------+--------------------------------------------------------------------------------------------+----------+---------------------+ 1 row in set (0.00 sec)
取得の仕方はこうで、pluckを使うと結果は配列に入ります。
mapss = Sometest3.select(:id,:name).where(:id => 2).pluck(:id,:name) puts mapss # => 2 john puts mapss[0] # => 2 john puts mapss[0][0] # => 2 puts mapss[0][1] # => john
その際に発行されるSQLがこんな感じです。
(0.3ms) SELECT `sometest3s`.`id`, `sometest3s`.`name` FROM `sometest3s` WHERE `sometest3s`.`id` = 2
ちなみにwhereとselectを入れ替えてみても発行されるSQLは同じでした。
mapss = Sometest3.where(:id => 2).select(:id,:name).pluck(:id,:name) (0.3ms) SELECT `sometest3s`.`id`, `sometest3s`.`name` FROM `sometest3s` WHERE `sometest3s`.`id` = 2
参考URL
http://6rats.blog62.fc2.com/blog-entry-75.html
http://d.hatena.ne.jp/suginoy/20120605/p3
0 件のコメント:
コメントを投稿