Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

非ログインユーザに対し、メンバーの古い名前が表示される #2072

Open
sankichi92 opened this issue Feb 12, 2023 · 2 comments

Comments

@sankichi92
Copy link
Owner

https://ku-livelog.slack.com/archives/CQLNA742J/p1676033377690089

LiveLogでログインしてない状態のとき、表示される名前が現在の名前じゃなくなるバグがあると思います
左の表記の時はバグる時があって、右の表記の時は正しく表示されるようです

1676033348686

@sankichi92
Copy link
Owner Author

sankichi92 commented Feb 12, 2023

該当箇所のコード:

- if current_user
= render @songs
- else
= render partial: 'songs/song', collection: @songs, cached: true

ログインユーザの場合、曲の公開範囲と自身が演奏しているかどうかでユーザごとに見え方が変わるため、2018年4月にキャッシュしないようにしていた: 43e2be8

Rails のフラグメントキャッシュの仕様上、対応する Song オブジェクトの updated_at が更新されていればキャッシュは失効する。が、フラグメントには Song だけでなく Play と Member オブジェクトの情報も含まれている。Play は以下の通り song アソシエーションに touch: true を設定しているため、更新があった場合に Song の updated_at も更新される。

belongs_to :song, touch: true

しかし、Member については更新があっても Song の updated_at は更新されない(多対多の関係なのでするべきでもなさそう)。そのため、報告にあったように Member の情報が更新されても、Song に紐づくフラグメントのキャッシュが失効せず、古い情報が表示されてしまうという事象が発生する。

ただ、これは当時の考慮漏れかというとそういうわけではない。プロフィールの編集機能が実装されたのは #680 の2019年11月で、当時はメンバーの名前(姓)は不変だった。よって、2019年11月のプロフィール機能実装以降、意図しない挙動になっていたようす。 #2072 (comment)

キャッシュを入れてパフォーマンスが改善するということもなさそうに見えるし、こういうバグの原因にもなるので、キャッシュやめるでよさそう。たぶん、当時フラグメントキャッシュという機能を知って使ってみたくなったとかそんな理由で入れた気がする……。

@sankichi92
Copy link
Owner Author

sankichi92 commented Feb 12, 2023

ただ、これは当時の考慮漏れかというとそういうわけではない。プロフィールの編集機能が実装されたのは #680 の2019年11月で、当時はメンバーの名前(姓)は不変だった。

これは記憶ちがいだった。#7 を見ると初期から名前の編集はあったっぽい。Song フラグメントに Member 情報が表示されるようになったのがそのあとだったかなと思ったけど、これも割と初期からありそう: 9ac969c#diff-4af48fdb10576e36bd17e41b0855b26a7d5b6b80c6394d21580b65f9b0a63fed

キャッシュ入れた時からの考慮漏れかな……。Member の名前はほとんど更新されないので全然気づかなかった。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant