Rails関連のことを調べてみた2022年08月26日

Rails関連のことを調べてみた2022年08月26日
目次

【Rails】Modelに定義した定数をControllerやViewで使用する方法

## はじめに
どうも、もきおです。RailsでModelに定義した定数をControllerやViewで使用する場面が実務でちょくちょく使う事があり、どうやって参照するんだっけ?と思ったので、調べたのをメモとして残しておきたいと思います。

## 結論
定数を参照するには**Model名(Rubyならクラス名)::定数名**で参照する事ができます。
“`ruby:
MAIN_USERS = [“Bob”, “Keny”, “John”, “July”, “Karen”].freeze

User::MAIN_USERS
# => [“Bob”, “Keny”, “John”, “July”, “Karen”]
“`
## 具体例
さて、具体例に入っていきましょう。今回はユーザー登録の際、SNSのURLを入力する欄があるとします。その際、省きたいURLを予め定数として登録しておき、実際入力され渡ってきたURLと定義していた定数が部分一致する場合、バリデーションでアラートを表示するというパターンで記述したいと思います。

まずは良く使うものをmodelに定数定義しましょう。“.fr

元記事を表示

ActiveRecord の update, save は Dirty じゃないとき UPDATE 文を発行しないので別のオブジェクトで同一のレコードを扱うときに注意

[ActiveRecord#update](https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update), [ActiveRecord#save](https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-save) はDirtyな値を持たない時、実際のUPDATEを行わない。便利機能だけど、更新対象を複数の変数に受けている場合、ちょっと予想外の挙動をするので注意。

“`ruby
user = User.find(42)
user.name # => ‘Tarou’

current_user = User.find(42)
current_user.name # => ‘Tarou’

current_user.update!(name: nil)
user.update!(name: ‘Tarou’) # => Dirty でないので UPDATE 文が発行されず、 DB の nam

元記事を表示

【入門】DockerでRailsのAPIモードを環境構築しHerokuへ本番反映する手順

## はじめに

今回はDockerを使ってRailsAPIの環境構築および簡単なアプリ開発を行い、ローカルで作成したDockerコンテナをHerokuに置いて本番反映する流れを解説していきます。

Railsの環境構築およびAPIの開発そして本番反映の流れを学びたい人はぜひ参考にしてみてください。

## この記事の対象者

– Dockerを使ってRailsAPIの開発をしたい人
– Dockerで作成したアプリをHerokuを使って本番反映したい人
– ポートフォリオ開発をこれからしたいと思っている人

## この記事でやらないこと

– Railsの細かい文法説明
– Dockerについての詳しい解説
– Herokuについて詳しい解説

上記において必要箇所は解説を都度入れますが、「そもそもdockerとは」といった細かい箇所の解説については参考記事を貼っているのでそちらを参考にしていただければと思います。

## この記事の目標

– Dockerを使ったRailsAPIの開発
– Dockerで作成したコンテナをHerokuに反映し本番公開する

## Dockerで

元記事を表示

【Rails】DBの一意性について【備忘録】

本記事はRailsチュートリアル6.2.5の備忘録です。
URL:https://railstutorial.jp/chapters/modeling_users?version=5.0#sec-uniqueness_validation

内容としては、ユーザ(Userクラス)のメールアドレス(email)を一意なものとして定義し、そのテストをしていくというものです。
アプリ側(モデル)とDB側の両方で、一意性を設定することができますが、結論から言うとどちらも設定する方が良いようです。

それでは詳細に説明していきます。

アプリ側では、以下のように一意性を持たせることができます。
“`ruby:アプリ側
class User < ApplicationRecord … validates :email, presence: true, length: { maximum: 255 }, format: { with: /正規表現/ }, uniqueness: true #####追記####

元記事を表示

【Ruby】メソッドの後の感嘆符”!”について

メソッドの中には、破壊的にデータを変更してしまうものがあり、慣習として名前に”!”が付けられます。

例えば、以下のコードがあったとします。
“`
self.email = self.email.downcase
“`
参考:Railsチュートリアル 第4版 6章より
https://railstutorial.jp/chapters/modeling_users?version=5.0#sec-minimum_password_standards

上記だと右辺で”self.email”を全て小文字にしてから自身に代入することで更新していますが、
.downcase!メソッドを用いることで、直接”self.email”の値を変更することができ、より簡潔に書けます。

“`
self.email.downcase!
“`

破壊的なメソッドは便利そうですが、一方で元の値を強制的に上書きするので、使いどころには注意ですね。

【追記2022/08/26】
@nodai2h_ITC 様よりご指摘を頂きました。
以前、”!”をメソッドに付けると破壊的なメソッドになると勘違いしていまし

元記事を表示

RDS MySQLとAuth0を繋げる

こんにちは。SARAHの沈(シム)です。
最近認証基盤をRailsのdeviseからAuth0への切り替えを行う作業があり、Auth0と既存のDBを繋げる機会がありまして、
自分が学んだ内用を共有しようかと思います。

目的

– RailsのDevise認証からAuth0への認証基盤を移行
– DBのユーザーデータは維持する(Export/Importなし)
– Auth0のOpen ID Connect(以下OIDC)を付けてAPI Gatewayを保護

Auth0へ移行した理由

弊社のFoodDataBankサービスがRuby on Railsで構築されましたが、これから追加する機能を考えた時に拡張性が低く、開発パフォーマンスもあまり出ない状況であるため、フロント側を新たに構築する流れになりました。RailsのAPIを立ち上げるとDeviseとの通信で認証はできますが、メンテナンス、コストなど色々考えたところ、Railsに載せるより、Auth0を用いて進むのがフロント側の認証繋ぎの負担も下がるし、将来的にEC2で立ち上げたRailsもなくなることによってコスト削減

元記事を表示

【Ruby】Railsでリクエストのバリデーションを行うライブラリ`rails_param`

## 概要
Railsでリクエストのバリデーションを行う場合、[Rails基礎 ストロングパラメータとバリデーション](https://hpsuzucat.hatenablog.com/entry/2020/10/24/224143)の記事にある通り、ApplicationRecordの機能を使用する方法などが挙げられます。もちろん、この方法でも全然良いのですが、ApplicationRecordのモデルに通す前に、controllerでバリデーションしたい時もあるなと感じました。
何かないかなと調べてみた結果、`rails_param`というライブラリが良さげだったので、今回少し紹介します。

## 機能など
[nicolasblanco/rails_param](https://github.com/nicolasblanco/rails_param)に、ライブラリのReadmeがあります。パラメータの、型指定や、必須チェック、最小値・最大値など基本的なチェックは出来そうです。また、項目毎にエラーのメッセージもカスタムで設定できます。

## 実装サンプル
以下はAPIで、文字列の

元記事を表示

[Rails6]グループ機能を実装する

### 前提
記事を書いている私は現役のエンジニアではなくエンジニアを目指して学習中の者です。
よって、気をつけてはいますが記述内容には誤った内容が含まれている危険性があります。
その為この記事は参考程度に読んで頂き詳しい内容は公式の記述を参考にすることをおすすめします。

### この記事で実装すること
Rails6系のPFでグループ機能を実装したのでその時の手順と詰まった箇所についてまとめました。
PFは卒業アルバムページを作成できるようになっており、そのアルバムを共有するメンバーをグループで設定しています。
よって以下のような機能を持ちます。
– アルバムに招待するメンバーを選択できる
– アルバムメンバーにだけ該当するアルバムを表示する

### 使用技術
Ruby 3.1.2
Rails 6.1.6

### 実装手順
既に以下のモデルを持つアプリを作成した前提で進めていきます。
**Userモデル**
ユーザーは複数のアルバムを持つことができます。
“`ruby:user.rb
has_many :albums, dependent: :destroy
“`
**Alb

元記事を表示

Ruby on rails JqueryとBootstrapが反映されない

今日は、RailsのTutorialsでJqueryとBootstrapをインストールした後、Dropdownの反映がされなかったので、その対処法についてまとめました。

まずは、こちらのコードを実行しました。
~~~app/javascript/packs/application.js
//= require jquery
//= require bootstrap
~~~

そして、
~~~app/assets/stylesheets/custome.scss
@import “bootstrap”;
~~~
を追加しました。
しかし、これでは動かず、、

~~~app/layouts/application.html.erb