LoginSignup
40
33

More than 5 years have passed since last update.

railsプロジェクトで個人的によく使う便利メソッド集

Last updated at Posted at 2014-07-18

よく使う便利なメソッドをまとめてみた。

pluck

mapでもいいけどpluckのほうがselectするカラムを指定するので、効率がよい。

pry(main)> User.where(id: 100).map(&:id)
SELECT `users`.* FROM `users` WHERE `users`.`id` = 100
=> [100]
pry(main)> User.where(id: 100).pluck(:id)
SELECT `users`.`id` FROM `users` WHERE `users`.`id` = 100
=> [100]

参考 : http://blog.livedoor.jp/sasata299/archives/51847390.html
参考url読むとわかるが、実はselectの絞り込みの分だけではなく、
ActiveRecordオブジェクトを生成しないかららしい。

each_with_object

「初期化して、eachして値を格納してその値を返す」という処理は、
そのまま書けば下記のように書く(最後のobjとか忘れがち)

def test(array)
  obj = []
  array.each do |value|
    obj << {value: value}
  end
  obj
end

しかしeach_with_objectを使えばもっと簡潔に書ける

def test(array)
  array.each_with_object([]) do |value, obj|
    obj << {value: value}
  end
end

first_or_create

そのままの意味。
あったら引っ張ってきて、なかったら作る

Book.where(title: "初めてのruby").first_or_create

find_each

eachだと全データをメモリ展開してしまうので、
たくさんのデータを対象にした処理とかはメモリから溢れてしまうかもしれない…
なのでfind_eachで少しずつ展開する方が良い。

User.where(push_flag: true).find_each do |user|
  push_method(user)
end

ちなみにデフォルトは1000件だが、下記のようにまとめる量を指定することもできる。
find_each(batch_size: 500)

参考 : http://blog.livedoor.jp/sasata299/archives/51882704.html

to_sql

吐き出されるqueryが確認できる。

pry(main)> User.where(id: 100).to_sql
=> "SELECT `users`.* FROM `users`  WHERE `users`.`id` = 100"

explain

EXPLAINの出力を確認できる。
参考のurlとかを見ながらチューニングしてる

pry(main) > puts User.where(id: 100).explain
User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 100
EXPLAIN (0.2ms)  EXPLAIN SELECT `users`.* FROM `users` WHERE `users`.`id` = 100
EXPLAIN for: SELECT `users`.* FROM `users`  WHERE `users`.`id` = 100
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref   | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
|  1 | SIMPLE      | users | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+

参考 : http://nippondanji.blogspot.jp/2009/03/mysqlexplain.html

まとめ

まだまだ色々ありますが、便利なメソッドはつかっていきたい!

40
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
33