Rails Diary

プログラミングの学習記録です。

パスワード再設定課題メモ

★ 完成イメージに対し、どういった実装をするのか必要なのかを洗い出しておくと。To doリストを作っておくことで、こんがらがってきたときに対処しやすい。 ユニーク制約、nilは許可する bundle exec rails g sorcery:install reset_password --only-submodu…

環境ごとの定数管理

okmt-aya-26.hatenablog.com この記事で記載したconfig.aciton_mailer.default_url_options = { host: localhost:3000 }について深堀りしたい。 ↑でメール内のリンクが上手く通らなかったのは、:hostパラメータを明示的に指定していなかったため(2.7 Action…

gem: configについて

★gem: configを使うことで便利に定数管理ができる! 環境ごとに異なる定数を管理するため 設定値をconfigフォルダ以下に一元管理することでメンテナンスが楽になる 環境ごとに値が変わらない場合は一つ上の階層のconfig/settings.ymlファイルに記述すると良…

letter_openerでメールが表示されない問題

パスワードリセット課題のつまずき letter_openerで送信したメールを確認するも、メールに記載されたリンクから編集ページに飛ぶことができなかった。 以下の画面になってしまう。 config/environments/development.rbに以下を追加することでリンクが繋がっ…

パスワードのリセット機能①

何が何だか分からなくなってきたので、小分けにしてまとめ直します。 まず、sorceryのreset_passwordサブモジュールを使ったパスワードリセット機能から。 reset_passwordサブモジュールをインストール bundle exec rails g sorcery:install reset_password …

ransackを使った検索機能

課題の反省点 DRYを意識したところ返って文章量の多い実装になってしまった。 →検索結果のみを表示するsearch.html.erbを作ったものの、search.html.erbの検索フォームからはブックマークした掲示板かどうかに関わらず検索できてしまった。 検索フォームへの…

ページネーションを実装する

kaminari ページネーションを簡単に実装できるkaminariというジェムを使う⚡️ gem 'kaminari' ジェムをインストール後、コマンドでデフォルトの構成ファイルを作成することができる。 bundle exec rails g kaminari:config config/initializersディレクトリ配…

作成・削除のAjax化、エラーの処理の分岐

課題メモ okmt-aya-26.hatenablog.com ↑で学んだことをかなり活用してみたが、appendメソッドを使うと、非同期通信にならずにprependメソッドに変更した。こちらだと上手く動作したが理由が分からず フォームの中身を消す処理でresetメソッドが上手く動かな…

いいね機能のAjax化

作業した流れ ① link_toにremote: trueを追加する remote: true追加後、検証でHTMLにコンパイルされたコードがdeta-remote="true"になっているか確認した。 ↑ deta-remote="true"になっている! ② link_toのパスはcreateアクションに送られる仕様になってい…

フォーム送信をAjax化する

Ajax実装する方法 pikawaka.com ↑こちらのサイトを参考に簡易的なメッセージアプリを作って、Ajaxがどういうものなのか体感してみた。具体的な実装はPikawakaさんの通りのため、記載していませんが個人的にメモしておきたっかたところをまとめています。 Aja…

rails sできない問題

経緯 rails sをすると「A server is already running」のエラーメッセージが出てしまい、サーバーを起動することができなくなってしまいました。 試したこと ターミナルを全て削除してみる →「A server is already running」のまま tmp/pids/server.pidファ…

いいね機能まとめ③(いいねした投稿一覧,N+1問題対策)

前回 okmt-aya-26.hatenablog.com 実装の流れ(続き) 中間テーブルfavoriteモデルの作成 アソシエーションを定義 一部ギミックをモデルに記載 ルーティングの設定 いいねボタンビュー作成 favorites_controllerの実装 いいねした投稿一覧作成 ←ここから! 掲…

いいね機能まとめ②(いいねボタンビュー、コントローラ)

前回 okmt-aya-26.hatenablog.com 実装の流れ(続き) 中間テーブルfavoriteモデルの作成 アソシエーションを定義 一部ギミックをモデルに記載 ルーティングの設定 いいねボタンビュー作成 ←ここから! favorites_controllerの実装 ←ここまで! いいね一覧作成…

いいね機能まとめ①(モデル作成、ルーティング)

目的 星ボタンを押すとある投稿をいいねする機能の作成 いいねした投稿を一覧で確認できる画面の作成 今回どういった流れでどういう処理が行われ、結果どうなるのかという流れが自分にとってかなり複雑で分かりづらかった。 多対多の関係 ツイッターのような…

リクエストのパラメーター付与について

リクエストの疑問点 ルーティングはboardsにネストしない形でresources :bookmarksを記載している (略) resources :boards do resources :comments, only: %i[create], shallow: true get :bookmarks, on: :collection end resources :bookmarks, only: %i[c…

アソシエーションについて復習する

経緯 多対多のテーブルが全く理解できない モデルに記載されている内容が分からない 分からなすぎて何から質問したら良いかが正直分からない(重症) とりあえずアソシエーションの不理解が一つの要因としてありそうなので復習する 完全自分用メモ qiita.com…

編集・削除ボタンの実装

課題の反省点 削除にdestroy!を使用していない。 コメントがついた投稿は削除させないといった制約がある時を除き、基本的にある投稿の削除が失敗することは考えられないので、失敗を想定していないなりの処理を記載する →削除失敗が想定されない場合、destr…

empty?,blank?,present?,nil?メソッドについて

empty?は入れ物が存在するのが前提 okmt-aya-26.hatenablog.com ↑において def page_title(page_title="") basic_title=アプリ名 page_title.empty? ? basic_title : page_title + basic_title end の様な判定ロジックを用いたが、このロジックの三項演算子…

引数のデフォルト値

目的・備考 あるアプリの各ページタイトルをページごとページタイトル | アプリ名の様に動的に表示したい その際、ヘルパーを用いてアプリ名のみをページタイトルにするページ、ページタイトル | アプリ名にするページを分ける判定ロジックを作りたい。 okmt…

タイトルを動的に表示する

課題 共通レイアウトであるapplication.html.erbのhead部分は現在<title>アプリのタイトル</title>というような静的なタイトルが記載されている。このままだとWebページで検索した際、一覧ページであろうが、新規登録ページであろうが、ページタイトルは全て共通のものとな…

なぜ深いネストを避けるのか

疑問 ネストしたルーティングとは? なぜshallowオプションで深いネストを避けるの? ネストしたルーティング 2.7 ネストしたリソース Railsガイド 他のリソースの配下に子リソースを配置すること。親子関係をルーティングで表すためによく使うらしい。 前提…

ある投稿に対するコメントの構造

課題で分かったこと 例えば、posts/show.html.erbのビュー画面で利用する変数についてはpostsコントローラのshowアクションで作成する。 commentsの一覧だからcommentsのコントローラのindexアクションにしなければいけないと思い込んでいた。あくまでもpost…

ネストされたルーティングにおけるform_with

経緯 ある掲示板に対するコメントを入力フォームを作りたい その際、form_withに渡す引数の仕組みが分からない 分解して考えてみる。 外部キーの存在 外部キーを設定したことにより、board_id(外部キー)が存在しない状態ではコメントは作成できない。 アソ…

「link_to 変数」で詳細画面に遷移

ブログ投稿数がいたずらに増えるのが嫌だったのですが、一つの課題から得られる知識が多くて溜めていると消化不良を起こしそうなので簡単に残しておきます。 Railsの内部構造から紐解いていこうと思ったものの、コードが全く理解できずに挫折したため、自分…

コマンドまとめ

知っているものは割愛、うろ覚え、初見のものをまとめました。 ターミナルのショートカット Tab、Ctrl+I…コマンドの候補を表示、候補が一つしかない場合はそのコマンドに補完してくれる Ctrl+P、Ctrl+N…以前表示したコマンドを表示してくれる。↑↓と一緒 Ctrl…

画像のアップロード

carrierwave ファイルアップロード用のgem ファイルのアップロード機能を簡単に追加できる。 Railsの画像投稿の仕組みでよく使われる。 mini_magick 画像を加工してくれるgem mini_magickを使う前提としてImage_magickをインストールする必要がある??? Im…

デバック課題メモ

課題反省点 ログをちゃんと見る!!! ルーティングエラーが出た際、以前遭遇したdeleteがgetで飛んでしまう問題と勘違いして同じようにrails-ujsをインストールして対応したが、エラーが修正されずに長いこと悩んでいた。 リダイレクト先が指定されていない…

日記(3)お蔵入り質問メモ

ごちゃごちゃ備忘録日記 ※文章量多い せっかくだから質問を利用しようとしたら、まとめている内になんとなく分かったのでやめました 質問をまとめるのに時間がかかったので、当時こんな疑問を持っていたということでここに記録しておきます。 (※主観で自己…

国際化する際の柔軟性

修正前 修正後 なぜこのように修正するのか? success: t('defaults.message.created', item: Board.model_name.human) flash.now[:danger]=t('dafaults.message.not_created', item: Board.model_name.human) "%{item}を作成しました"として、後から値item:…

Gemインストールの環境指定と初期データ(seeds.rb)の作り方

gemのインストール環境指定 developmentとtestどちらの環境にもインストールとあったが、どこに書けば良いか分からなかったため、gemfile内の記載の意味について少し調べた。 開発環境、テスト環境、本番環境、どの環境において必要なGemなのか。例えば、後…