自分が指摘されたり、書いてあるコードを見て「なるほど〜〜」と思ったやつ。
フルネーム表記の仕方
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
database.yml
の設定を元にDBに接続する
1
2
3
4
5
6
7
8
9
10
11
12
|
default: &default
adapter: mysql2
encoding: utf8mb4
charset: utf8mb4
collation: utf8mb4_bin
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: hogehoge
password: password
socket: /tmp/mysql.sock
development:
<<: *default
database: hogehoge_development
|
のようなymlの場合は、mysql -u hogehoge -ppassword hogehoge_development
で接続できる。
しかし、実際にdatabase.ymlを参照して接続するのは面倒くさい。Railsでは、以下のようなコマンドで接続できる。
1
2
|
bin/rails dbconsole
bin/rails db
|