This page looks best with JavaScript enabled

【Ruby】業務で得た小ネタ的知識まとめ

 ·   ·  ☕ 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">
Share on

END
END
@aiandrox

目次