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

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

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ちゃんねる、ガルちゃんなど

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

## アプリの機能と特徴

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

・投稿に対して「フ

元記事を表示

Rails 8.0.0 のアプリケーションをDocker環境で起動する

この状態を目指します。
![Ruby_on_Rails_8_0_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504414/9654b43c-c5ea-7a2d-1a12-4cef5100ad6a.png)

# 準備
VSCodeに `Dev Containers`拡張機能をインストールしておきます。
筆者のVSCodeは言語設定を日本語にしてあります。

# rails-new コマンドをインストール
Docker環境前提ですが、このコマンドを使えばPCにRubyやRailsをインストールしなくても、新しいRailsアプリケーションを作れます。
`rails-new blog –devcontainer` のように使います。
コマンドが使えるかどうかは`rails-new help`や`rails-new -V`で確認できます。

https://github.com/rails/rails-new

具体的な手順

“`
https

元記事を表示

[Rails]マイグレーション後のschema.rbはいつも絶対ではない

「私が貼ったインデックス、全部消されているのですが…」

今週仕事をしていたら、このような連絡をいただいた。
あれ、schema.rbは手修正してはいけないんじゃなかった?(違う)

## 経緯
いつものようにマイグレーション込みのPRを作成し、レビュー後マージされその週の本番リリースまでにその内容がSTGところだった。

コンフリクトも生じていなく、developマージの時はschema.rbのバージョンだけ新しくしてapprove、マージ。

しかし、マイグレーションの時にインデックスを貼るところの記述がschema.rbから丸ごと消えていてそのままSTGが運用されていた。

## 兆候
確かに最近マイグレーションを実行するたびにすごい量のモデルアノテーションの変更分が出ていた。
うざいなと思いつつ、原因を探ろうとはしなかった。

## 原因
### マイグレーション実行順序
以下のような状況を考える。

“`
develop branch: A -> B -> C
\
feature branch: D ->

元記事を表示

【誰でもできる】自作Gemを作って公開するまでの道のり

こんにちは、とまだです。

[Ruby on Rails Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ruby-on-rails)、2 日目の記事をお届けします!

みなさんは、「**自分で Gem を作ってみたい!**」と思ったことはありませんか?

自分が作った Gem(ライブラリ)が世界中の Ruby on Rails アプリで使われるなんて、ちょっとテンション上がりますよね。

そこで、今回は Gem の作り方を**初心者向け**に解説していきたいと思います。

以前、無駄な Gem を作った経験をもとにしているので、よければそちらもご覧ください。

https://qiita.com/tomada/items/579d54283f03a0dc6a9b

## Gem って何?

まずは、そもそも Gem とは何かおさらいしましょう。

Gem とは、Ruby で作られたライブラリやプログラムをパッケージ化したものです。

例えば、以下のようなものが Gem として提供されています。

– **de

元記事を表示

【個人開発】家で勉強できない私が「勉強場所の検索サービス」を作成しました ✍️

# はじめに
初めまして。ゆうき(@yuki31100725)と申します。

現在、プログラミングスクールRUNTEQに通ってRuby on Railsを学習しております。

今回、スクールの卒業制作として「**LearnLocator**」という、勉強場所(自習室・コワーキングスペース)の検索サービスを作成しました。

### サービスはこちら
https://www.learn-locator.com/

### GitHubリポジトリはこちら
https://github.com/Yuki11saitou/LearnLocator

Image from Gyazo

本サービスとロゴに込めた思い

このロゴは、羽根ペンで筆を走らせるようなイメージと、LearnLocatorの「 L 」を組み合わせたデザインにしています。

また、サービス全体で「 白 」を基調としたデザイン

元記事を表示

とほほのRuby on Rails入門を参照しながら、よくわかっていないことをまとめた

とりあえずやってみようという感じで手を出した際の雑多なメモです。
お世話になったサイトは以下です。

https://www.tohoho-web.com/ex/rails.html

## 3.10 スキャフォールド(scaffold)とは何か

> ルーティングやコントローラー(controller)、ビュー(view)、モデル(model)とテーブル(データベース)の記述やファイルなどを自動で作成してくれるコマンドです。

Rails scaffoldを初心者向けに解説!実際にアプリを作ってみよう!

実際に以下を実行してみると、大量のファイルが自動で生成されました。
しかも既にxxx.html.erb等

元記事を表示

Ruby on RailsにViteとTailwindCSSを導入

前は`Webpack`を使っていましたが、設定などが難しいので辞めました。VueJSに慣れてから、VueJSの作者の作った`Vite`を使ってみて、早くて便利なので各プロジェクトに導入しました。

この記事は、既存のRailsアプリケーションに簡単に`Vite`と`TailwindCSS`を導入する方法をメモします。

## Viteを追加する

“`ruby:Gemfile
gem ‘vite_rails’
“`

そして以下のコマンドでViteをインストールする

“`zsh
vite install
“`

`app/views/layouts/application.html.erb`に、`stylesheet_link_tag`と`javascript_importmap_tags`はもう必要ないので削除します。その代わりにVite専用タグを追加します。

“`erb:app/views/layouts/application.html.erb
<%= vite_client_tag %>
<%= vite_javascript_tag 'appl

元記事を表示

【Rails】N + 1問題についてそろそろちゃんと向き合わなきゃな…

# 「あー、N+1問題ね。うんうん…もちろん考慮すべきだね」
と言いつつ朧げな理解のままここまで生きてきました。
歴が長くなるにつれこういう基本的なことを知らないのがバレると恥ずかしいので
恥をかく前にちゃんと理解しておこう。

## eager_load

指定したassociationをLEFT OUTER JOINでキャッシュする

“`
orders.eager_load(:order_items)
“`
“`
SELECT
`orders`.`id` AS t0_r0,
`orders`.`store_account_id` AS t0_r1
FROM
`orders`
LEFT OUTER JOIN `order_items` ON `order_items`.`order_id` = `orders`.`id`;
“`
## preload

ordersテーブルからデータを取得
取得してきた`order`のidを持つ`order_items`をIN句で取得
クエリが2回実行される
“`
orders.pre_load(:order_items)
`

元記事を表示

rails new [プロジェクト名]コマンドで作成したアプリがGitHubにプッシュできない時の対処法

## はじめに
以下のrails newコマンドで作成したプロジェクトがGitHubにプッシュできず困ったので、同じエラーに悩まれている方の手助けになればと思い、記事に残すことにしました。
“`bash
rails new rails-app
“`

## まずは結論
結論から言うと、rails newコマンドで.gitファイルがrails-appディレクトリ内に自動的に作成されていて、それがGitHubではサブモジュールとして扱われてしまうことが原因でした。作成された.gitを削除することで解消しました。

## エラー状況

“`bash
git add rails-app
“`
上記を実行すると、以下のように表示されます
“`bash
error: ‘rails-app/’ does not have a commit checked out
fatal: adding files failed
“`

## エラー対処
### 1. ディレクトリ内のファイルを確認
“`bash
ls -a rails-app/
“`
**実行結果**
![スクリーンショット 2

元記事を表示

Ruby on Railsの課題の取り組み方(RUNTEQの課題を通して学んだ課題の取り組み方について)

Hello!しっしーです🦁

僕は、現在RUNTEQというプログラミングスクールに通い、
Ruby on Railsを使ってWebアプリ開発の技術習得を目指しています!

そして、現在は5ヶ月目に突入!
総学習時間はざっくり800時間くらいになります。
(※独学時の学習時間も含むHTML、CSS、JSがメイン)

そんな僕が、現在どのように課題と向き合い、
どのように問題解決をしているのかをまとめてお話しすることで、

これから学習をしていく方の参考になるのではないか?と思い!

現在の課題の取り組み方をまとめておきたいと思います。

## 目次:

– [Ruby on Railsの課題に取り組む時の心構え](#ruby-on-railsの課題に取り組む時の心構え)
– [Railsの課題の進め方](#railsの課題の進め方)
– [まとめ](#まとめ)

## Ruby on Railsの課題に取り組む時の心構え

まず、課題に対する心構えについてお話しします。
当然ですが、ある程度学習を進めているとはいえ、
僕は全くの🔰初心者です。

なので、何もわかりません笑

なので、ち

元記事を表示

RailsからSlack/GoogleChat/TeamsなどのチャットアプリにDMで通知を送る

## はじめに
サーバーから直接DMで通知を送りたいことがあると思いますが、Webhookを使うと公開チャンネルへの投稿はできるものの、DMには送信できません。
そこで今回は、各チャットツールでDM送信を実現する方法を比較しながら紹介します。

## チャットツール連携の共通的なステップ
### 1. チャットアプリの作成
各チャットツールで、アプリ名、機能、認証時のリダイレクトURLなどを設定します。
設定は`manifest.json`や管理画面から行います。

### 2. アプリのインストール
通常、管理者の承認が必要です。開発時には自分のワークスペースや組織でのみインストール可能です。
他組織へのインストールが必要な場合は、マーケットプレイスへの公開やリンク共有で促します。

### 3. ユーザー認証ボタンの用意
OAuth認証を行うためのボタンを設置し、スコープなどのパラメータを渡します。認証完了後、アクセストークンが発行されます。

### 4. サーバーからのDM送信
取得したアクセストークンでメッセージを送信します。
ユーザー認証によって得られたアクセストークンをり

元記事を表示

OTHERカテゴリの最新記事