Rails関連のことを調べてみた

Rails関連のことを調べてみた

RSpecでActionMailerのテストでdeliver_laterがある際の対処法

[株式会社TECH LUCK](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)という会社で代表兼エンジニアをしている齊藤です。

DXプロジェクト、開発プロジェクト、Rails開発などでお困りごとがありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)からご相談をいただけますと幸いです。
以下のような問題に対応することが可能です。
– プロジェクトでRailsエンジニアが足りなくて困っている
– Railsのバージョンアップをしたいがノウハウ・リソースが足りなくて困っている
– オフショア開発をしているが、要件の齟齬やコード品質が悪いので改善したい

また、Railsエンジニアも募集しておりますので、興味がありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium

元記事を表示

Rails7でTailwindCSSを導入する

## 1.プロジェクトの作成
“`bash
rails new rails_tailwind -j esbuild
cd rails_tailwind
“`

## 2.Tailwind CSSとForemanのインストール
Gemの追加
“`bash
bundle add tailwindcss-rails foreman
“`

Tailwind CSSのセットアップ
“`bash
rails tailwindcss:install
“`

これにより、以下のようなファイルが自動的に生成されます:
– `app/assets/stylesheets/application.tailwind.css`
– `tailwind.config.js`

## 3.確認用ページの追加
コントローラーとビューの追加
“`bash
rails generate controller Home index
“`

これにより、以下のファイルが生成されます:
– `app/controllers/home_controller.rb`
– `app/views/home/index

元記事を表示

gem ‘sorcery’ を使ってユーザー機能を実装してみた!

gem ‘sorcery’ とは
gem ‘sorcery’ は、Railsにおける認証システムの実装を支援するライブラリ。ログイン、ログアウト、セッション管理などの基本的な認証機能を簡単に追加できる。

### 今回はそんな’sorcery’を使って、ユーザー機能の実装を行なってみよう!

# gem ‘sorcery’導入

公式に導入方法が詳しく載っているので割愛します。

[公式チュートリアル](https://github.com/Sorcery/sorcery/wiki/Simple-Password-Authentication)

# 実装概要

ゴールへ向けた大まかな実装手順を提示します。

## 今回の課題で必要なタスク

– ユーザー登録機能
– ログイン機能
– ログアウト機能
– gem ‘sorcery’を使用

### そこから明確にイメージできるものとそうでないものを区別しよう!

– イメージできるもの
– ユーザー登録
– ログイン
– ログアウト
– イメージできないもの
– gem ‘sorcery’

### ゴ

元記事を表示

Tailwind CSSでRailsのエラーメッセージをフォームの下に表示する方法

[株式会社TECH LUCK](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)という会社で代表兼エンジニアをしている齊藤です。

DXプロジェクト、開発プロジェクト、Rails開発などでお困りごとがありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)からご相談をいただけますと幸いです。
以下のようなお悩みを解決できます。
– プロジェクトでRailsエンジニアが足りなくて困っている
– Railsのバージョンアップをしたいがノウハウ・リソースが足りなくて困っている
– オフショア開発をしているが、要件の齟齬やコード品質が悪いので改善したい

また、Railsエンジニアも募集しておりますので、興味がありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium=art

元記事を表示

診断結果の機能を作りたいあなたに

こんにちは
今回は診断結果を表示するための機能を実装します
診断機能につきましては、下記にてご確認ください
https://qiita.com/jiantaiyiteng1/items/12f62f32775558e3bd0b

今回の診断機能は下記の認識で進めていきます
・設問3問のYESNO方式
・8通りの選択肢を作る

## 診断結果を見るのボタンを押しても画面遷移できないとき

1. **ルート設定について**

`resources :diagnoses`のルートは下記のように適切であるかを確認します

“`Ruby
# ルート側にdiagnoses(診断機能)を追加
# 現在のroutes.rbでは、診断機能を提供するresources :diagnosesに対してindexとshowアクションしかルートが設定されていないが
# トップページから診断フォーム(newアクション)に進む必要がある
resources :diagnoses, only: %i[index show new create]
“`

2. **フォームの送信確認**

`診断結

元記事を表示

診断機能を作りたいあなたに

こんにちは
RUNTEQにて卒業制作で診断アプリを作ってます
今回はとってもシンプルなYESNO形式で診断する機能を共有いたします
診断結果の出力は別途共有いたします
初めての公開記事で頼りないところもございますが、よろしくお願いいたします

# **ルーティングを定義**

ルート側にdiagnoses(診断機能)を追加します

現在のroutes.rbでは、診断機能を提供するresources :diagnosesに対してindexとshowアクションしかルートが設定されていないが、トップページから診断フォーム(newアクション)に進む必要があります

“`ruby
# routes.rb
Rails.application.routes.draw do
# (省略)
root “static_pages#top”
# 診断機能にて追加
resources :diagnoses, only: %i[index show new create]
end
“`

# `diagnoses#new`へのルートに変更
Railsのルーティングヘルパーで、dia

元記事を表示

RSpecで共通のテストを再利用!shared_examplesとinclude_examplesの使い方

# 1. はじめに
RSpecでテストを書いていると、似たようなテストケースが何度も出てきて「コードが重複してしまう…」と感じたことはありませんか?そんなときに便利なのが shared_examples と include_examples です。この2つを使うと、共通のテストケースを1か所にまとめて複数のテストで再利用できるようになります。
今回は、shared_examplesとinclude_examplesの使い方を紹介します!

# 2. shared_examplesとinclude_examplesとは?
shared_examples : 共通のテストケース(例)を定義するための機能。
include_examples : 定義した共通のテストケースをテストで呼び出すための機能。
この2つを使うことで、同じようなテストをいちいち書き直さずに、再利用できるようになります!
###### 基本の使い方
例えば、あるAPIが200のステータスコードでJSON形式のレスポンスを返すかを確認するテストを書いたとします。
“`
describe SomeController, t

元記事を表示

Railsでfile_fieldをいい感じに装飾する

[株式会社TECH LUCK](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)という会社で代表兼エンジニアをしている齊藤です。

DXプロジェクト、開発プロジェクト、Rails開発などでお困りごとがありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium=article&utm_campaign=myarticle)からご相談をいただけますと幸いです。
以下のような問題に対応することが可能です。
– プロジェクトでRailsエンジニアが足りなくて困っている
– Railsのバージョンアップをしたいがノウハウ・リソースが足りなくて困っている
– オフショア開発をしているが、要件の齟齬やコード品質が悪いので改善したい

また、Railsエンジニアも募集しておりますので、興味がありましたら[弊社HP](https://techluck.co.jp/?utm_source=qiita&utm_medium

元記事を表示

文字列を特定のバイト数 (not 文字数) で切り詰める

# やりたいこと

文字列を特定のバイト数 (not 文字数) で切り詰めたいです。

# 最初に結論

Active Support コア拡張機能が提供する [String#truncate_bytes](https://railsguides.jp/active_support_core_extensions.html#truncate-bytes
) を使います。

“`rb
limit = 100 # bytes

engineers = ‘👨🏿‍💻👩🏿‍💻👩🏼‍💻👨🏻‍💻👩🏾‍💻👨‍💻👨🏼‍💻👨🏾‍💻👨🏽‍💻👩‍💻👩🏻‍💻👩🏽‍💻’
engineers.bytesize
#=> 172

truncated_engineers = engineers.truncate_bytes(limit, omission: ”)
#=> “👨🏿‍💻👩🏿‍💻👩🏼‍💻👨🏻‍💻👩🏾‍💻👨‍💻”
truncated_engineers.bytesize
#=> 86
“`

# 長い解説

## 例: 文字列を MySQL の TEXT 型に収まる範囲に切り詰めたい

とある Rails

元記事を表示

Ruby on RailsでOmniAuthを用いてgoogleとgithubの認証やり方完全入門(初心者向け)

# 新規登録やログインをgoogleやgithubのアカウントでできるようにする
### OmniAuthとは
**OmniAuth**は、OAuth認証をシンプルに扱うためのRubyライブラリで、RailsアプリケーションにSNSログイン機能を実装する際に広く利用されています。OmniAuthを使うと、GitHub、Google、Facebookなど、さまざまなプロバイダーを通じての認証が容易になります。

### OAuth認証とは
**OAuth認証**(OAuth 2.0)は、ユーザーが自分のパスワードを第三者に渡さずに、他のサービスにアクセス許可を与えるための認証プロトコルです。OAuthは、特にWebアプリケーションやモバイルアプリケーションにおいて、ユーザーが他のアプリケーションやサービスと安全にデータを共有できるようにするために使われます。

## ①googleのOAuthアプリケーションを作成する
googleのAPIを作成するにはG

元記事を表示

Rails Namespace Modelを利用した際のrelation を修正する

# Rails Namespace Modelを利用する

## TL; DR

rails7の場合に(8だと解消するPRが含まれていたchange logがあったきがするが探せてないw)、nested classの参照解決をして、利用しやすいように適宜renameする。

## 0. 環境

| name | version |
| :–: | :—: |
| rails | 7.2.1.1 |
| ruby | 3.3.5 |
| mysql | 8.4 |

## 1. 想定するModelとdatabase schema

### 1-1. Model

“`mermaid
classDiagram
class Organization {
+Int id
}
class OrganizationUser {
+Int id
}
class User {
+Int id
}
“`

“`mermaid
erDiagram
organizations {

元記事を表示

Rails Composite Primary Keysの table migration

# Rails Composite Primary Keysの table migration

## 備忘録

あんまり個人的には利用していないComposite Keyのサンプルにdatabaseの記載がすくなかったため、備忘録として記載。複合Keyあんまり使うケースがないんだよなと思いつつ。

## 0. 環境

| name | version |
| :– | :– |
| rails | 7.2.1.1 |
| mysql | 8.4 |

## 1. Model構成

[Rails Guide](https://guides.rubyonrails.org/active_record_composite_primary_keys.html#associations-between-models-with-composite-primary-keys)をベース作成します。
Bookじゃなくて、OrderItemにしましたが。

“`mermaid
classDiagram
class Order{
+Int shop_id
+Int id
+S

元記事を表示

【Rails7】deviseを使用したログイン機能の作成

Rails、Rubyを学習中の者です。
備忘録として記事を作成します。
間違っているところも多々あると思いますので、その際はコメントなどでご教授いただけますと幸いです。

### deviseとは
Railsアプリケーションにおいて、比較的簡単に認証機能を導入できるgemです。
デフォルトではメール(email)で認証を行います。
比較的簡単とはいえRailsの知識が必要ですので、初めてRailsでアプリを構築する方は先に自分で認証システムを作ってみることをお勧めします(公式のgithubでも推奨されています)。

### 環境
Windows11
Ubuntu 22.04.4 LTS
Ruby 3.1.4
Rails 7.0.8.6

### 今回の実装の目標
– deviseを用いた認証機能の構築
– ユーザーネームでログイン・認証ができるようにする

### 作業の流れ
– gemの追加
– ジェネレータのインストールと各種設定の変更
– モデルの作成
– ビューの設定
– 設定ファイルの編集

### gemの追加
“`
# Gemfile
gem “devise”, “~>

元記事を表示

【Rails】deviseのエラーメッセージを日本語化する方法

deviseを使用したアプリケーションで、ログインや新規登録のエラーメッセージを日本語化することで、ユーザーにとってより使いやすいインターフェースを提供できます。今回は、deviseのエラーメッセージを日本語に変更する設定方法について解説します。

### 1. devise-i18nを導入する

devise-i18nというGemを使用することで、deviseのエラーメッセージを簡単に多言語化できます。このGemには日本語を含む多くの言語ファイルが含まれており、すぐに設定に使用できます。

Gemをインストールする

“`rb:gem
gem ‘devise-i18n’
“`
を追加します。

“`terminal
bundle install
“`

### 2. Railsの日本語化設定を行う

次に、Rails全体の言語設定を日本語に変更します。config/application.rbファイルを開き、以下の行を追加または編集します。

“`config/application.rb
module YourApp
class Application < Rails

元記事を表示

【個人メモ】Ruby on Rails チュートリアル 第10章

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです

# 個人メモ
– new_record?メソッド
DBに存在する既存のユーザーかそうでないかを論理値で区別できる
– 受け入れテスト(Acceptance Tests)
ある機能の実装が完了して受け入れ可能な状態になったかどうかを決定するテスト
– before_action
何らかの処理が実行される直前に特定のメソッドを実行する
– フレンドリーフォワーディング
ログイン前のユーザーがアクセスしようとしていたページにログイン後リダイレクトする仕組み
session[:forwarding_url]にGETリクエストが送られたURLを保存
– サンプルユーザー
– Faker gem
架空のユーザー名を作成するGem
– seeds.rb
サンプルのユーザーを記述
rails db:seedで実行
– ページネーション
will_paginateで実現
– render @users
Railsは自動でユーザーのコレクションを列挙し、それぞれのユーザーに対して_us

元記事を表示

【個人メモ】Ruby on Rails チュートリアル 第9章

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです

# 個人メモ
– ユーザーごとに記憶トークンと記憶ダイジェストを関連付けることで、永続的セッションを実現できる
– urlsafe_base64メソッド
長いランダムな文字列を生成
記憶トークンとして用いる
– attr_accessor :remember_token
記憶トークンをハッシュ化したもの(記憶ダイジェスト)をDBに保存したいため、attr_accessorで仮想の記憶トークン属性を定義
– update_attributeメソッド
特定の属性をDB上で更新したい際に用いる
バリデーションを回避できる
– cookiesメソッド
cookies.permanentで有効期限が20年に設定される
cookies.encryptedで値を暗号化してcookiesに保存できる(複合もできる)

元記事を表示

rails の lib 自動読み込み

railsで自作moduleを作成したときにエラーに出くわした

“`
uninitialized constant Hoge::Fuga::Piyo (NameError)
“`

以下の設定でlibディレクトリ以下のファイルはすべて勝手に読み込まれると思っていた
“`config/application.rb
module App
class Application < Rails::Application ... config.autoload_lib(ignore: %w[assets tasks]) ... end end ``` ### libディレクトリ構造 ファイルの置き場所はmoduleの定義に合わせないと読み込まれない ```lib/hoge/fuga/piyo.rb module Hoge module Fuga module Piyo def custome_method ... end end end end ``` 上記の場合は `lib/hoge/fug

元記事を表示

<%= csrf_meta_tags %> ←案外すごい

<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag ... %>
<%= javascript_importmap_tags %>  これなに???

1. <%= csrf_meta_tags %>
このタグは、CSRF(クロスサイトリクエストフォージェリ) 攻撃からアプリケーションを守るために使用されます。Railsは、フォーム送信やAJAXリクエストが正規のユーザーからのものかどうかを確認するために、セッションごとに一意のCSRFトークンを生成します。

役割: このメタタグは、CSRFトークンをページのメタデータに埋め込み、リクエスト時にトークンが正しいことを確認できるようにします。
利用方法: 通常は設定のままで、Railsが自動的にフォームやAJAXリクエストにトークンを含めてくれるため、開発者側で追加の操作は不要です。
2. <%= csp_meta_tag %>
このタグは、**CSP(コンテンツセキュリティポリシー)**を設定するために使用されます。CSPは、Webページで読み込むコン

元記事を表示

在庫計算から考える「データ」と「情報」〜在庫計算は漸化式〜

## 「データ」と「情報」について
かの有名な「SQLアンチパターン」の監訳者まえがきで、和田省二さん(和田卓人さんのお父様)が、「データ」と「情報」について以下の様に記載しています。
> さて、みなさんは「情報」と「データ」の違いをご存知でしょうか。この二者の関係は「多くの情報を秘めた貴重なデータ」という表現で言い尽くせます。いつでも我々が欲しいのは、意味のある(目的を持った)正しい情報なのです。一方、データは単なる各種の事実の値(何らかの、名称とか日付とか金額とか)であって、それ自体に目的はありません。事実は唯一無二なので同じデータを複数持つのは良くありません。そして目的を持った情報は、無目的な事実を集積したデータを種々加工して得られます。データは唯一無二の事実値ですから、それから作り出される情報はどれも正しく、互いに整合性がとれています。
SQLアンチパターン xii

実は私は今まで「データ」と「情報」に関して強く意識したことは多くありませんでした。しかし、今回、在庫管理システムを開発するにあたって、「データ」と「情報」について意識をして開発する必要がありました。なぜなら、在

元記事を表示

初めての個人開発:フレンド機能付き匿名ブログ

「気になった匿名投稿を見つけた。どんな人なのか気になる」

「匿名で意見を吐き出したいけど、もし共感してくれる人がいるなら繋がってみたい」

と思ったことはありますか?

そんなニーズに応えるべく(そして私が使ってみたく)、匿名だけど繋がりを持てるアプリ「匿名フレンド」を作ってみました。

### 匿名フレンド

https://anonymous-friend-diary.com

# 開発のきっかけと背景
世の中に出回っているブログサービスやSNSは、実名のものと匿名のものに分かれています。ここで言う実名とは、誰が何を投稿したかがわかるという意味で使っています。

– **実名サービス**: アメブロ、Instagram、Facebook、Xなど
– **匿名サービス**: はてな匿名ダイアリー、5ちゃんねる、ガルちゃんなど

匿名だけど、気になった誰かと繋がれる。そんな場を用意してみたく、アプリを作りました。

## アプリの機能と特徴

匿名で投稿できるブログです。ログインなしでも使えます。\
それ以外に、このアプリの特徴として「フレンド機能」があります。

・投稿に対して「フ

元記事を表示

OTHERカテゴリの最新記事