WeBlog

Webに関する情報を中心に発信してるブログ

Ruby on Rails

ActiveRecordのinverse_ofについてメモ

inverse_ofとは inverse_ofを指定した関連づいている2つのモデルでは、お互いに同じインスタンス(オブジェクト)を参照できるようになる。 両方のモデルがメモリ上で同一のインスタンス(オブジェクト)として扱われる。 逆に、inverse_ofの設定が無いと別…

gem seed-fu を使って、ダミーデータを作成する

gem seed-fu を使うことでダミーデータを入れることができます。 railsにはデフォルトで rails db:seed というコマンドを使って、db/seeds.rbを実行することでダミーデータを入れることができます。 db/seeds.rbは何も考えずに使うと、rails db:seed という…

Slimの使い方

Slim とは? Slim は Rails3 以降 に対応した高速, 軽量なテンプレートエンジンです。 HTMLの< >や閉じタグなどを無くして、最低限必要なものだけを残したシンプルなテンプレート言語 軽量 といった特徴を持つ、Ruby製のテンプレートエンジンです。 つまり、…

Railsの環境構築での疑問

今回はスクールの課題でforkした後に環境構築で疑問に思うことがあったので、その内容を書いていきます。 1、リモートリポジトリをforkする 今回は既存のリモートリポジトリをforkして課題を進める感じだったので、ますはforkしました。 2、リモートリポジ…

data: { disable_with: 〇〇}について

disable_withって何? HTMLにdisable_withという属性が付与されているけど、これなんだろうと思ったので調べてみました。 これは、二重送信をさせないようにするためについているみたい。 なので、フォームから何かを送信するときに、連続でボタンを押せない…

gem enum_helpについて

enumとは? enumとは、列挙型とも呼ばれ、一連の整数値に対して複数の変数名をつけれる仕組みを指します。 要は整数と名前を紐づけることができるということです。 enumを使う準備をする カラムを用意する enumを使うにはテーブルにカラムを準備します。 cla…

Railsでセレクトボックスを作成する

セレクトボックスとは? セレクトボックスは上記の画像のように選択するための一覧みたいなものです。 これをRailsでどのように作成するのかを書いてみます。 セレクトボックスを作成するHTMLを確認 ますは、セレクトボックスを作るためにどんなHTMLが必要な…

メニューのid属性やclass属性を付け外しする

メニューのアクティブ・非アクティブとは? メニューのアクティブ・非アクティブ判定とは、上記の画像のように選択しているリンクに「active」などのclass属性やid属性を付与して、そこに色をつけたりして強調する物です。 可変長引数を使った実装 # applica…

Ransackで日付検索を実装する

今回やりたいのはransackというgemを使って日付検索を実現したいと思います。 ransackを使う準備や使い方に関しては下記記事で記載しています。 https://weblog-tec.hatenablog.com/entry/2021/05/03/095143 ransackのPredicateとは? ransackには便利なPred…

レイアウトファイルのレンダリングを切り替える

レイアウトファイルとは? レイアウトファイルは全てのビューファイルで大元にあたるファイルのことです。 # app/views/layouts/application.html.erb <html> <head> <title><%= page_title(yield(:title)) %></title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_</head></html>…

enumについて

enumとは? enumとは、列挙型とも呼ばれ、一連の整数値に対して複数の変数名をつけれる仕組みを指します。 要は整数と名前を紐づけることができるということです。 enumを使う準備をする カラムを用意する enumを使うにはテーブルにカラムを準備します。 cla…

名前空間のルーティング、コントローラー、ビューを作成する方法

名前空間とは? 名前空間は、クラスをフォルダの構造のように、階層的に分類することが出来る仕組みのことになります。 同じフォルダの中だと、同じ名前のファイルは作れません。 でも、フォルダを別にしてしまえば、同じ名前のファイルを作ることが出来ます…

AdminLTEで管理画面を実装する

AdminLTE3とは? AdminLTEは、Bootstrap4.6フレームワークとJS / jQueryプラグインに基づいて作成された、管理画面の作成に利用されるCSSフレームワークです。 yarnを使ってAdminLTE3をインストール rubyのライブラリ管理を行うGemやMacOSに導入するライブラ…

すでにindex貼られているカラムに対してunique制限をかける方法

内容 すでにindexが付与されているカラムに対してユニーク制約を付与したいと思います。 今回はreset_password_tokenカラムに対してユニーク制約を付与します。 現状 現状だと上記の画像のようにreset_password_tokenカラムのユニーク制約はfalseになってい…

Action Mailerについて

Action Mailerとは? Railsに備え付けられている、メールの送受信を行うことができる機能。 メイラーはActionMailer::Baseを継承し、app/mailers配下に〇〇_mailer.rbファイルが配置されます。 app/views/メーラー名配下にメールを送信するテンプレートのビ…

sorceryのreset_passwordモジュールを使ったパスワードリマインダー機能の処理フロー

Reset Passwordモジュールでは、token発行機能や、tokenによるユーザー認証機能など、パスワードリセットに必要な機能をまとめて提供してくれています。 createアクションが実行された時 パスワードリセット対象のメールアドレスを申請して、リセットの対象…

sorceryのreset_passwordモジュールを使ったパスワードリマインダー機能の実装

sorceryのreset_passwordモジュールを使ったパスワードリマインダー機能の実装手順のメモです。 sorceryのwiki https://github.com/Sorcery/sorcery/wiki/Reset-password rails guide https://railsguides.jp/action_mailer_basics.html 1、sorceryのreset_p…

アセットパイプラインの仕組みついて

アセットパイプラインとは? アセットとは、「JavaScript」「CSS」「画像」などのリソースのことをアセットと言います。 このアセットを効率的に扱うための仕組みのことを「アセットパイプライン」と言います。 アセットパイプラインは「Sprockets」というge…

ja.ymlの読み込む方について

モデルが持つ属性を読み込む ja.ymlファイルで何を読み込んでいるのかを図で書いてみたいと思います。 モデルがもつ属性(カラム)の日本語翻訳情報を取得したい場合は モデル名.human_attribute_name(カラム名) のように書きます。 なので、 t(User.human_a…

resorceとresorcesの違いについて

ルーティングを設定するときによく使うのがresorcesという複数形のルーティングです。 しかし、ルーティングにはresourceという単数系のものもあります。 この2つの違いについて書いていきます。 resourcesメソッド Rails.application.routes.draw do resou…

ransackで検索機能を実現する方法

ransackとは? ransackはRailsで検索機能や表示順番を並び替える(ソート)機能を実現するためのgemです。 ページネーションを使って商品が1つの画面に30件とか表示されると、その中からお目当ての商品を探すのはとても大変です。 そんな時に「特定のキー…

kaminariでページネーションを作成する

ページネーションとは? ページネーションは、商品や掲示板などが一覧で表示されているページで、次のページや前のページに行くリンクのことです。 下記の画像のようなものがページネーションです。 どうしてページネーションが必要かと言うよ、1つのページ…

【Rails】コールバックメソッドのexcept とonlyについて

今回使うコード onlyを使ってみる exceptを使ってみる まとめ Railsのコントローラーの中で、コールバックメソッドの実行対象のアクションとしてexceptとonlyがあります。 before_actionやafter_actionといったコントローラーのコールバックメソッドは、オプ…

shallow: trueをつける場所によって差はあるのか?

試した内容 結論 shallow: trueって付与する場所で変化するのか疑問に思ったのでちょっと試してみました。 試した内容 今回は下記の内容を試しました。 まずは、resources :boardsに対してshallow: trueをつけています。 resources :boards, shallow: true d…

Ajax通信について

Ajaxとは? 通常の通信 非同期通信 一般的なAjaxのコード Railsにおけるajax通信 Railsでremote: trueを使ったAjax通信 ディレクトリ構成 link_toメソッドにオプションを追加 コントローラーを記述する JSファイルを用意する Ajax通信を見てみる replaceWith…

【Rails】RailsでURLに「?キー = 値」を指定する方法

実際にやってみた Railsでよく見みるルーティングとして下記のような7つの基本的なルーティングがあります。 動的なルーティングには:idという部分にオブジェクトのidを埋め込むことができます。 boards GET /boards(.:format) boards#index POST /boards(.…

【Rails】collectionとmemberを使ったルーティングの作成

基本的なルーティング collectionを使ったルーティング memberを使ったルーティング 基本的なルーティング Railsでは index new show create edit update destroy という7つの基本的なアクションが簡単に作成できます。 例えばルーティングで下記のように書…

【Rails】railsで複合uniqueのvalidationをつけてやる

DBの設定で複合ユニークを設定 バリデーションチェックで複合ユニークを設定する 「user_id = 1、board_id = 2」があったら、「user_id = 4、board_id = 2」みたいな、同じboard_idは入れられない scope は複数指定できる 複合ユニークのバリデーションとは…

【Rails】中間テーブルとthrough、sourceオプション

多対多の関連とは? 多対多のリレーションを表現する 多対多のアソシエーションを定義する has_many throuthアソシエーションを使わないで取得する has_manyメソッドのthroughオプションを使ってみる。 has_many through sourceを使ってみる モデルのscopeを…

【Rails】belongs_to オプションを設定した場合対象カラムに対する presence: true は自動で設定される

テーブルの関係 モデル 検証してみる belongs_to オプションを設定した場合対象カラムに対する presence: true は自動で設定されるみたいなので、その検証をしてみる。 テーブルの関係 今回はusersテーブルと、boardsテーブルを作成する ユーザーが掲示板を…