This page looks best with JavaScript enabled
⚠️

【Ruby/Rails】業務で得た小技まとめ

 ·   ·  ☕ 1 分で読めます
✏️

自分が指摘されたり、書いてあるコードを見て「なるほど〜〜」と思ったやつ。

フルネーム表記の仕方

1
2
3
"#{last_name} #{first_name}"
# じゃなくて
[last_name, first_name].compact.join(' ')

「1対多(0)もあり」のときに、has_manyが0のときに404にする

例えば、users/:id/tagsとかのとき、該当のuserがtagsを持っていないときがある。
そんなときはテンプレートでNoMethodErrorになったりする。そもそも、NotFoundで404ページを出したい。

そんなときはこれ。

1
@user = User.joins(:tags).find(params[:id])

joinsはinner joinを行うので、tagsを持たないusersレコードは引っかからなくなる。
そのため、ActiveRecord::RecordNotFoundをraiseする。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[32] pry(main)> User.joins(:tags).find(4)
  User Load (1.0ms)  SELECT  `users`.* FROM `users` INNER JOIN `registered_tags` ON `registered_tags`.`user_id` = `users`.`id` INNER JOIN `tags` ON `tags`.`id` = `registered_tags`.`tag_id` WHERE `users`.`id` = 4 LIMIT 1
ActiveRecord::RecordNotFound: Couldn't find User with 'id'=4

[33] pry(main)> User.find(4)
  User Load (2.1ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 4 LIMIT 1
=> #<User:0x00007fab64c255a8
 id: 4,
 twitter_id: "hoge",
 uuid: "5zrm-XBdKyNB",
 name: "hoge",
 description: "",
 privacy: "published",
 role: "general",
 created_at: Tue, 26 Jan 2021 23:19:37 JST +09:00,
 updated_at: Tue, 26 Jan 2021 23:19:37 JST +09:00,
 screen_name: "hoge",
 avatar_url: "https://pbs.twimg.com/profile_images/1267362108703817728/bSK1Ux-E.jpg">

ActiveRecordからハッシュを作る

1
2
3
4
5
[1] pry(main)> user = User.last
  User Load (7.0ms)  SELECT `users`.* FROM `users` ORDER BY `users`.`id` DESC LIMIT 1
=> #<User id: 1, name: 'END', created_at: "2022-05-20 17:24:26.000000000 +0900", updated_at: "2022-05-30 19:25:12.000000000 +0900">
[2] pry(main)> user.slice(:id, :nickname)
=> {"id"=>1, "name"=>"END"}

slice (ActiveRecord::Core) - APIdock

Share on

END
END
@aiandrox

 
目次