LoginSignup
0
0

More than 3 years have passed since last update.

Day17 Topページとその他修正

Last updated at Posted at 2020-03-15

トップページ

image.png
トップページは背景画像と新規登録・ログインフォームしかなかったため、サービスやコンセプトの説明ページを付け足した。

その他修正

マイグレーションファイルのエラー

本番環境のみ、エラーが出てしまうマイグレーションファイルがあった。String型からint型に変更するマイグレーションファイルだったが、Postgresだと下記のようにint型であると明示しなければエラーになるらしい。
Before
image.png
After
image.png
またこのエラーのせいでrails db:seedsが本番環境ではできなかったがそれも問題なくできるようになり、本番環境でサンプルユーザが使えるようになった。

存在しない画像の拡大表示(コメント)のエラー

画像の拡大表示は、/image/:idというURLだが、:idに画像が存在しないIDを入れられてしまうとエラーがでてしまっていた。画像のIDとは、コメントテーブルのレコードのIDのことである。コメントのレコードにコラムとしてimageがある。
拡大表示のコントローラでは、存在チェックがされておらず、変数.image_urlで出力しようとしてなにもないから出てしまっているエラーだったので下記のように修正した。
image.png
これでコメントがありかつ、それに画像がある時のみ拡大表示のビューがよばれ、そうでない時はエラーは出ずに、プロフィールページにリダイレクトするようにした。

ユーザー一覧で存在しないページが表示される問題

ユーザー一覧のページネートで、存在しないはずのページ数まで表示されてしまう。
これは非表示ユーザ分のページが通常ユーザの一覧画面に表示されてしまっているということだった。コントローラ側では非表示ユーザのみが入っている変数を用意していたので、なぜかわからなかったが、ページネートの定義の部分が間違っていた。
コントローラ
image.png
@usersに公開ユーザがすべて入っている。
ビュー
image.png
ここで本来であれば@usersでなければならないのに、非表示ユーザも含まれる変数をページネートの対象?(このwill pagenateの詳細な挙動については調べる必要あり)にしていたため、非表示ユーザ文のページが含まれていた。なお非表示ユーザの名前等が表示されなかったのは、表示のeach文ではちゃんと@usersで正しい対象にしていたからだった。
下のように修正して、問題は解決した。
image.png

文字が要素を突き抜けてしまう問題

image.png
このように日本語など以外のテキストを連続で入力すると、通常では改行しないというルールのため、そのまま要素を突き抜けてしまう。そこで、その要素に word-wrap: break-word;とどんな文字でも改行するというルールを足してやると、解決する。
image.png
※この解決方法だと単語の途中でも問答無用で区切られてしまうので、入力されるのが英語であるときなどは推奨されない。
https://qiita.com/gcyata/items/353658a7bdc1e7395337

存在しないコメントを削除した時のエラー

コメント削除に、存在チェックが入っていなかったために存在しないIDからコメントを探す段階でエラーがでてしまっていた。下記のように、correct_userのBefore_actionに、コメントが存在している場合としていない場合の処理を追加した。
image.png
→画像ではただflashがでるだけで、リダイレクトがないためフラッシュが出たのちにアクションが実行されてしまっていた。リダイレクトを追加して修正した。
image.png

これで例えば複数タブで開いて、一方でコメントを削除した後に別タブで削除が行われても、エラー画面は表示されずに、フラッシュが表示される。

存在しないユーザを削除した時のエラー

これも上のコメントと同じようなエラーで、存在チェックがされていないために発生していたため、こちらではBefore_actionのexistがそのまま使えそうだったのでそれで対応した。
destroyメソッド
image.png

destroyメソッドでは整合性を保つために、もし削除対象のユーザがいいねをしていた、もしくはされていた場合にそのいいねデータも削除されるようにしてある(Likesテーブルは単独のテーブルで、Usersテーブルに対して外部キーなどをもっておらず、userが削除された時にどうじに削除されるよう定義できないため)が、いいねデータは存在チェックがされていないのにエラーがでない。コンソールで見ても空の配列がでるだけでエラーは出ない。
image.png
一方でUserの場合は、存在しないIDをもとに探す段階で下記のようにエラーが出る。
image.png
これはwhereで抽出すると、なにもなければ箱だけ用意されて、箱がdestroyされるという動きになり、Findだとオブジェクトすらないからエラーが出るのだろうか。

Before_action
image.png
このようにすることで、複数タブで同一ユーザに削除が行われてもエラーがでないようになった。

0
0
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
0
0