2021-05-01から1ヶ月間の記事一覧

JavaScriptでのイベントドリブン

JavaScriptの基本 JavaScriptとRubyの違い [プログラムが動く場所] ・JavaScriptは、ブラウザ上で動く(サーバー上で動くものもある) エラー内容は、開発者ツールなどから探す(ログの画面には、エラー内容は出てこない) ・Rubyは、サーバーサイド側で動く エ…

ブックマーク機能の追加

ブックマーク機能の追加 掲示板にブックマーク機能を設定する手順は、以下になります。 ①Bookmarkモデル作成(中間テーブル) ※中間テーブルとは? 多対多の関係にある2つのテーブルの間に挟まって、2つの組み合わせパターンだけをレコードとして保存する。 多…

<<演算子の使い方

<<演算子の使い方 has_manyでアソシエーションを定義していることにより、<<演算子を利用できる。 使い方の例は、以下の通り。(今回は、modelsにメソッドを定義しているので、そのパターンで説明しています。) [app/models/bookmark.rb] belongs_to :board b…

renderにインスタンス変数を渡す場合

renderにインスタンス変数を渡す場合の使い方 以下のようにコントローラで取得したレコードの数だけrenderするのを防ぐために、renderに直接コントローラで取得したインスタンス変数を渡す方法があるが、その解釈が誤っていたので、こちらに記載します。 コ…

redirect_backについて

redirect_backについて rails初心者でredirect_backの使い方を誤って認識していたので、こちらで説明します。 以下のような認識でいたのですが、 redirect_back fallback_location: リダイレクトする直前のページのパス 実際の使い方は、以下になります。 re…

リクエスト時にパラメータを付与する方法

リクエスト時にパラメータを付与する方法 railsでは、リクエスト時にURLにパラメータを付与することができる。 通常は、以下のようにパス名にidなどが含まれる時にパスのヘルパーメソッドにインスタンスなどを渡して、そのidの情報を与えて、コントローラ側…

renderする部分テンプレートの内容を変える方法

renderする部分テンプレートの内容を変える方法 renderで共通で利用している部分テンプレートにおいて、どこからrenderするかによって部分テンプレートの内容を変えたい場合。 以下は、掲示板の新規登録画面ビューと編集画面ビューをそれぞれ共通の部分テン…

form_withの使い方

form_withの使い方 [コントローラにモデルのインスタンスが定義されている場合でデータを保存する場合] ex) [app/controllers/boards_controller.rb] def new @board = Board.new end def create @board = current_user.boards.new(board_params) if @board.…

application_controller.rbとhelperの使い分け

application_controller.rbとhelperの使い分け [app/controllers/application_controller.rb]に記載するもの ・controllerで使うものを記載する。 [app/helpers ファイル]に記載するもの ・基本的にビューで使うものを記載する。(controllerで使う場合は、in…

アクション、メソッドとインスタンスメソッド、クラスメソッドの違い

[アクション、メソッドとインスタンスメソッド、クラスメソッドの違い] [アクション] ルーティングによりリクエストを受けた時に実行される処理のこと。(コントローラに記載する。) アクションとは、コントローラクラスのメソッドの事。 [メソッド] 処理をま…

findとfind_byの違い

findとfind_byの違い [findメソッド] @board = Board.find(1) ``` 上記のように[find]メソッドは、idを条件にした時にのみ使える。(該当するidのものを全て取得する。) また、該当するものが見つからない場合は例外(RecordNotFound)が発生する。 下記のよう…

掲示板の編集と削除機能

掲示板の編集と削除機能 [掲示板の編集機能] 掲示板の編集機能を実装するのにコントローラに以下のように記述する [app/controllers/boards_controller.rb] def edit @board = current_user.boards.find(params[:id]) end def update @board = current_user.…

nil? empty? blank? present? メソッドの違い

nil? empty? blank? present? メソッドの違い nil? rubyのメソッド board.nil? boardがnilならtrueを返す。 nil.nil? # true false.nil? # false "".nil? # false [].nil? # false {}.nil? # false 0.nil? # false empty? rubyのメソッド board.empty? board…

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

ページ毎にタイトルを変える方法 下記のようなタイトルをページ毎に変える方法になります。 各テンプレート(ビュー)間で異なる情報をレイアウトファイルに伝えたい場合は、[content_for]を使います。 [content_for]の使い方や手順は、以下になります。 rails…

掲示板にコメント機能を付与する方法

掲示板にコメント機能を付与する方法 モデルの関係は以下のようになっている [コメントモデルの作成] $ rails generate model comment body:text ↓ 作成されたマイグレーションファイルにNOT NULL制約を追加 [db/migrate ファイル] def change create_table …

JavaScriptのデバッグ方法

Chromeの検証ツールを使っての検証手順 ブラウザで検証ツールを開き、下記の[Sources]をクリック ↓ 下記のようにデバッグしたいファイルを選択する ↓ 下記の行番号をクリックすると青色に変わるので、そこがデバッグのブレークポイントになる。 ↓ ブラウザを…

フォーム欄の<label>と<input>の関係性

フォーム欄のlabelとinputの関係性 下記のようなフォーム欄があるviewファイルでテスト1のようなコードでテストを行なった場合、エラー1のように表示される場合。 [app/viewa ファイル] <%= form_with model: board, local: true do |f| %> <%= render 'shar…

画像アップロード機能[carrierwave Gem]と[mini_magick Gem]

carrierwave Gemとは? 画像をアップロードする為のGemです。 mini_magick Gemとは? 画像加工をしてくれるGemです。 [carrierwave Gemの導入手順] Gemfileに以下のように記述する。 [Gemfile] gem "carrierwave" ↓ bundle install ↓ [rails generate upload…

DBのリセット

[DBのリセット方法] DBをリセットする主なコマンドは、以下の2つ!! [rails db:reset] ([rails db:drop db:setup]と同義。) 今までのデータベースを初期化して、[db/seeds.rb]ファイルを使用して初期データを作成。 + [db/schema.rb]ファイルを元にデータベ…

テーブル同士を関連付ける設定

[テーブル同士を関連付けさせる方法] 既存のそれぞれのテーブルに以下のようにマイグレーションファイルを記述し、データベース上で紐付けをする。 (1つのUserに対して複数のBoard[掲示板]を持つように[1:多]の関係になるように、BoardにUserを示す外部キー[…

日時の国際化

日時の国際化の手順 以下のように設定を記述する [config/application.rb] config.time_zone = 'Asia/Tokyo' #タイムゾーンの設定 config.active_record.default_timezone = :local #データベースに登録、参照する時の設定(タイムゾーンと同じにする時は、:l…

N+1 問題

[N+1 問題]とは? 必要以上にSQLが実行されてしまい、パフォーマンスが落ちること。 ex)掲示板の一覧画面に個別の掲示板を全て表示する場合(以下コードを参照) 個別の掲示板を取得するのにSQLを1回実行 取得した個別の掲示板からユーザー情報を個別の掲示板…

Faker Gemの使い方

[Faker]Gemとは? ダミーデータを作成するGem ※注意 デフォルトの設定だと同じ内容のデータが作成される為、それを防ぐ為には、以下のようにオプションを追加する。 email = Faker::Internet.unique.email [Faker]Gemの導入手順 Gemfileに以下のように記載。…