- 1. [Rails] Delayed_Jobのテーブル構成についてまとめた。
- 2. Railsにおけるモデルのscopeメソッド
- 3. [rails初学者] userマイグレーションファイルをじっくり見てみよう
- 4. Devise使用時にログイン中のモデルと異なるモデルを編集する方法(CompanyでログインしてStaffの編集・更新)
- 5. gem install 時の permissions エラーの対応
- 6. Railsチュートリアル第8章学習まとめ
- 7. ActiveModel::ForbiddenAttributesErrorの解決法
- 8. 投稿アプリ ユーザー管理機能実装
- 9. 【Rails】画像のExif情報を削除する方法【ActiveStorage】
- 10. 【Rails】form_withとかlocal: trueとかdata: { turbo: false }を理解してなかったので色々調べた
- 11. FormObjectを編集に対応させる
- 12. NextjsのAppRouterで、redirect時に一度だけ表示する
- 13. 【Rails】バリアントを事前に生成する方法【ActiveStorage】
- 14. Railsチュートリアル7章学習まとめ
- 15. 【Rails】バリアントの生成方法【ActiveStorage】
- 16. バリデーションにおけるRailsログの理解とカスタムログの活用
- 17. Rails ERD触ってみた
- 18. 【初心者向け】失敗から学ぶ外部キー制約
- 19. 【Rails】絶対理解できる!検索機能のransack【ransackこれから覚える人に届け!】
- 20. Docker+Rails7+Mysqlの環境構築やってみた
[Rails] Delayed_Jobのテーブル構成についてまとめた。
### 概要
`DelayedJob`のテーブル構成(列構成)についてまとめました。### DelayedJobとは…?
RailsでJOBを非同期処理するための`gem` です。`DelayedJob`はデータベースをキューとして利用します。
つまり、実行するジョブの情報をデータベースに保存し、その情報を基に非同期でJOBを処理する方式ということです。
### DBのカラム構成
上記を踏まえてテーブル構成を見ていきましょう| カラム名 | 役割 |
| ———— | ——————————————————————————————————————– |
| `id`
Railsにおけるモデルのscopeメソッド
# はじめに
先日、業務で`scope`メソッドでの実装したので、備忘録として記事にしたいと思います。この記事では、`scope`メソッドの基本的な使い方をまとめてみました。
# モデルのscopeメソッドとは?
`scope`メソッドは、よく使用されるクエリをメソッドとして定義することができる機能です。
これにより、複雑なクエリを簡単に再利用できるようになります。
# Scopeメソッドの基本構文
`scope`メソッドの基本的な構文は以下のようになります。
“`ruby
scope :scope_name, -> { query }
“`– `scope_name`: スコープの名前を指定します。
– `query`: 実行するクエリを指定します。# Scopeメソッドの使用例
今回は、記事の一覧表示で人気の記事を取得する処理を例に見ていきます。
### scopeを使わないパターン
`scope`を使わずに人気の記事を取得する場合、以下のようにクエリを書くことになります。
“`ruby
# app/models/post.rb
class P
[rails初学者] userマイグレーションファイルをじっくり見てみよう
ユーザー管理機能の実装時に用いられるdeviseライブラリ。
それによって生成できるuserモデルと勝手に爆誕するuserマイグレーションファイル。今回はモデル生成により勝手に下界に君臨してしまった**userマイグレーションファイル**について、暇なので観察することにする。
特に今回は、**生まれたての状態時**を見ていく。
# userマイグレーションファイル爆誕
`rails g model user`と手慣れたようにコマンドを打ち込むと勝手にできる“`
db/migrate/xxxxxxxxxx_devise_create_users.rb
“`記述は以下のとおり
“`ruby
# frozen_string_literal: trueclass DeviseCreateUsers < ActiveRecord::Migration[7.0] def change create_table :users do |t| ## Database authenticatable t.string :email,
Devise使用時にログイン中のモデルと異なるモデルを編集する方法(CompanyでログインしてStaffの編集・更新)
## 概要
この記事では、RailsアプリケーションでDeviseとCanCanCanを使用して、`Company` と `Staff` という二つのユーザーモデルを効果的に管理する方法を紹介します。
特に、`Company` モデルでログインしている状態で `Staff` モデルのデータを編集できるようにする際に生じた以下のエラーの解消法を詳しく解説します。“`bash
Completed 401 Unauthorized in 0ms (ActiveRecord: 0.0ms | Allocations: 209)
“`
※ブラウザでリンクを選択後、アクションに遷移する前に上記のエラーが生じたため、deviseの認証関連が原因ではないかとあたりをつけました。## 1. 導入
本記事では、企業とその従業員をそれぞれ `Company` と `Staff` モデルで管理するシナリオを想定しています。各モデルはDeviseによって認証が行われ、CanCanCanでアクセス権限が管理されます。この設定を通じて、モデルごとの認証と権限のカスタマイズ方法を学びます。## 2.
gem install 時の permissions エラーの対応
いまさらながらGithub Pagesでプロフィールでも整備するかと思い立ち、おもむろにgem install したらpermissions error に遭遇しました。
“`
% gem install bundler jekyll
Fetching bundler-2.5.9.gem
ERROR: While executing gem … (Gem::FilePermissionError)
You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
“`下の記事によるとどうやらシステムのrubyを利用していると、権限不足でgemのインストールができないというエラーのようです。
https://qiita.com/nishina555/items/63ebd4a508a09c481150
ということで、gem install bundler jekyll ができるところまで手順を残しておきます。
– 環境
macOS Ventura# 現状確認
“`
Railsチュートリアル第8章学習まとめ
# 8.1セッション
Railsではsessionというメソッドを使って一時セッションを作成します。この一時セッションはブラウザを閉じると自動的に終了します。その後の章では、Railsのcookiesメソッドを使用して、ブラウザを閉じてもセッションを継続する方法について学びます。
cookieを使ってユーザー情報の保存や取り出しをおこなっていくってことですかね?
# 8.1セッション
ログインとログアウトの要素を、Sessionsコントローラの特定のRESTアクションにそれぞれ対応付ける
ログインのフォームは、newアクションで処理なぜnewアクションなのかとGPTに尋ねてみた時に
`新しいリソース(通常はデータベース内の新しいレコード)を作成するためのフォームを表示するために使用される`
とのことでした。納得。“`config/routes.rb
#リソースを追加して標準的なRESTfulアクションをgetできるようにする
Rails.application.routes.draw do
root “static_pages#home”
get “/
ActiveModel::ForbiddenAttributesErrorの解決法
## はじめに
Railsアプリケーションにおいて、`ActiveModel::ForbiddenAttributesError`が発生するという問題に直面することがあります。これはストロングパラメータが適切に設定されていない場合によく起こります。本記事では、このエラーの解決方法をQ&A方式で紹介します。—
### Q1: エラーの内容は?
A1: `ActiveModel::ForbiddenAttributesError`は、許可されていないパラメータをマスアサインメントしようとした際にRailsが発するエラーです。### Q2: ストロングパラメータは正しく設定されていましたか?
A2: はい、コントローラーでは`staff_params`というメソッドを使ってストロングパラメータを設定していました。このメソッド内で`require(:staff)`と`permit`を用いてパラメータの許可を行っていました。### Q3: パラメータの中身を確認しましたか?
A3: はい、`binding.pry`を用いてパラメータが正しく渡されていることを確認しました。#
投稿アプリ ユーザー管理機能実装
学習を進めていく中で、理解できたと思っていた部分が自力でやろうとするとまだまだだということが分かったので、ここで再度アウトプットします。
deviseを使ったユーザー管理機能の実装手順です。
#### deviseの導入・userモデル作成
deviseを使った場合、コマンドはrails g deviseになる。“`ruby:Gemfile
gem ‘devise’
“`
“`ruby
% rails g devise:install
% rails s
% rails g devise user
“`#### マイグレーションファイルにカラムの追加。
deviseを使うとemail.passwordは自動で生成される。
“`ruby:_create_user.rb
t.string :name
t.text :profile
“`
“`ruby
% rails db:migrate
“`#### バリデーションの設定。
空欄では保存できないことを定義。
“`ruby:user.rb
validates :name, presence: true
val
【Rails】画像のExif情報を削除する方法【ActiveStorage】
`config/application.rb`の`config.active_storage.variant_processor`が`:vips`に設定されている場合には、`saver: { strip: true }`を記述すると画像のExif情報を削除できます。
“`rb:app/models/user.rb
class User < ApplicationRecord has_one_attached :avatar do |attachable| attachable.variant :large, resize_to_fill: [256, 256], saver: { strip: true } attachable.variant :medium, resize_to_fill: [128, 128], saver: { strip: true } attachable.variant :small, resize_to_fill: [64, 64], saver: { strip: true } end # ... end
【Rails】form_withとかlocal: trueとかdata: { turbo: false }を理解してなかったので色々調べた
## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
駆け出しエンジニアとして約2ヶ月弱が経過しました🐣## 概要
仕事中、form_with関係の実装で詰まり、自分の理解が浅かったツケが来たのを感じたので、調べてみました😇
お恥ずかしながら、スクール時代はRails5、今はRails7を触っており、Railsのバージョンごとでの違いがごちゃ混ぜになっていたこと、フォームのオプションやそもそもAjaxなどきちんと理解できていなかったので調べたことをまとめます。:::note warn
間違っている箇所があるかもしれませんので、その際は是非教えて頂けると嬉しいです🙇
:::## フォームの非同期送信に関するオプション
### Rails5以前
フォーム送信時、デフォルトではページ全体がリロードされます。非同期処理をするにはオプションを明示的に設定します。
– `remote: true`
Rails5以前でフォームのオプションで使われていました。Ajaxを用いて非同期にします。
FormObjectを編集に対応させる
PF作成においてFormObjectを使用した際に、編集機能の実装に苦戦し時間を要したため覚え書きとして投稿させていただきます。
## form_withにおける登録、更新の切り替え
“`
form_with model: インスタンス変数 do |f|
“`
上記において“form_with“は渡されたインスタンス変数のメソッド“persisted?“の返り値によってリクエストをPOSTもしくはPATCHに切り替えています。
“persisted?“メソッドはレシーバーがDBに保存されている場合はtrue,保存されていない場合はfalseを返します。
urlオプションを渡さない場合、フォームの送信先urlは同様に渡されたインスタンス変数のメソッド“to_model“の返り値によって決定されます。## 使用例
今回、下記ER図におけるPurchaseモデルのレコードを保存するにあたり、ShopとBeanの選択をセレクトボックスにしてしまうとレコードの量次第では選択肢が膨大になりUIとして不適格だと判断したため、Stimulus-autocompleteとテキス
NextjsのAppRouterで、redirect時に一度だけ表示する
# 実装背景
Next.jsのAppRouterを使用して[server action](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations)で[redirect](https://nextjs.org/docs/app/api-reference/functions/redirect)を行うと、リダイレクト先のページで成功や失敗のメッセージを表示することが難しくなります。
これは、リダイレクトが発生すると、現在のページの状態がリセットされ、新しいページが読み込まれるためです。
これを解決するために、一度だけ表示するメッセージを保存する方法としてcookieを使用します。# 動作動画(`a`タグバージョン)
![flash.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183059/b60f0c9f-2b1e-5ec2-778f-f3cc6e6a1c7d.
【Rails】バリアントを事前に生成する方法【ActiveStorage】
以下のように`preprocessed: true`を記述することでバリアントを事前に生成できます。
“`rb:app/models/user.rb
class User < ApplicationRecord has_one_attached :avatar do |attachable| attachable.variant :thumb, resize_to_limit: [100, 100], preprocessed: true end end ```
Railsチュートリアル7章学習まとめ
## ユーザー登録
さていよいよ中盤の7章 ユーザー登録です。
この章はなかなか苦い思い出がある章で手順通りに作っているはずなのに
なぜかrails testを実行してもなぜかエラーがでる!!!と時間を要した章です。
チュートリアルやっている方は何かしらどこかでつまづくと思いますが
私も5カ所くらい大きくコケました。というわけで、改めて本章を理解して、どんなエラーがきても対処できるようになりたいと思います。
では本編へ行きます。*本編*
それでは本編を見ていきます。前回までにUserモデルを作成したのでユーザー登録機能を作りましょう
というのが7章のメインです。## ユーザーを表示する
ここでは、まずユーザーの名前とプロフィール写真を表示するためのページを作成とのこと。ここでの完成モックアップを見ていると完成から逆算して分解化して構造化していかなければいけないと感じました。逆算思考が大事。
## デバッグとRails環境
“`app/views/layouts/application.html.erb
.
【Rails】バリアントの生成方法【ActiveStorage】
以下のようにすると画像のバリアントを生成できます。
“`rb:app/models/user.rb
class User < ApplicationRecord has_one_attached :avatar do |attachable| attachable.variant :large, resize_to_limit: [128, 128] attachable.variant :medium, resize_to_limit: [64, 64] attachable.variant :small, resize_to_limit: [32, 32] end end ``` バリアントのURLを取得するには以下のようにします。 ```rb Rails.application.routes.url_helpers.rails_representation_url(avatar.variant(:large).processed, host: "localhost", port: "3000") ```
バリデーションにおけるRailsログの理解とカスタムログの活用
## はじめに
Railsアプリケーションを開発している際に、デバッグやエラーの特定は日常的な作業です。Railsのログはデータベースのトランザクションやリクエスト処理の詳細を提供しますが、バリデーションエラーのようなアプリケーションレベルのイベントは標準のログには詳細が記録されないことがあります。この記事では、Railsのログがどのように機能しているかを解説し、カスタムログを活用してデバッグ情報を充実させる方法を紹介します。## Railsのログが出る場合と出ない場合
### Railsのログが出る場合:
#### 1. **リクエストログ**:
これはHTTPリクエストを処理するたびに生成されます。リクエストメソッド、パス、完了ステータス、所要時間などが含まれます。#### 2. **データベースクエリログ**:
ActiveRecordを通じてデータベースに発行される各クエリの詳細が記録されます。これにはSQL文とクエリの実行時間が含まれます。たとえば、以下のバリデーションにおけるエラーログなどがそれにあたります。“`ruby
def unique_futu
Rails ERD触ってみた
# はじめに
みなさまこんにちは。
今回、railsのgemであるRails ERDを使用してみたのでまとめました。## Rails ERDとは
RailsのモデルからER図を自動生成することができるgem
以下の画像のようにER図を自動生成してくれます。
![erd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1462552/eba1617a-e88e-4b3d-f63f-946b044956be.png)出典
https://github.com/voormedia/rails-erd
## セットアップ
#### Graphvizをインストール (オープンソースのグラフ可視化ソフトウェア)Graphvizとはグラフ作成用のツールで、DOT言語というものを用いてテキストファイルを画像として出力することが できる便利なやつです。
“`
$ brew install graphviz
“`#### rails ERDをgemに追加
“` ruby:Gemfile
gro
【初心者向け】失敗から学ぶ外部キー制約
# はじめに
私は1年以上稼働しているシステムを運用しているエンジニアです。
今回は私がDB設計で失敗し外部キー制約について学んだことを記事にします。
少しでも皆さんの参考になれば幸いです。# こんな人に読んで欲しい
– DB設計をしている
– DB設計を勉強中
– 外部キー制約について学びたい
– 運用中のテーブルに変更をかけたい# 目次
– 皆さんにお伝えしたいこと
– 概要
– 失敗事例
– 間違った設計
– バグ調査
– 正しい設計
– 失敗から学んだこと
– まとめ# 皆さんにお伝えしたいこと
まず初めに、エンジニアの皆さんにお伝えしたいことは漏れなくテストしよう!!!です。
いきなりなんだ??と思うかもしれませんが、結局本記事で最も伝えたいことはこれなので先にお伝えしました。
それでは概要をお伝えしていきます。# 概要
## システム概要
登録した利用者情報を管理するシステムです。
利用者(エンドユーザー)はフォームから各情報を入力し、登録します。
管理者(クライアント)は管理画面から利用者情報を
【Rails】絶対理解できる!検索機能のransack【ransackこれから覚える人に届け!】
# ransackとは
様々な’モデルテーブルのカラム(縦列)’を用いて、様々な’検索’が出来ます。
検索機能としてよく使われているので、お使いの際はインストールしてください。
こちらでは理解する事を目標にしているのでインストールは他の記事読んでください。
他の皆様の記事はこれに装飾したり他の機能を組み込んだりして、
ノイズ混じりで説明してくれています。
これは純度100%のransack記事です。
自分が調べるときこういうの誰か書いとけよって思った内容です。
## controllerの書き方
“`ruby
def index
@q = モデル.all.ransack(params[:q])
@モデル = @q.result
end
“`
index下で一番簡潔に書くとこうだと思います。
@モデル = モデル.allがこうなります。
これをめちゃめちゃ分かりやすく説明します。
日本語訳します。
@qと:qのqはquery(質問)の略で、paramsは見つけてくるメソッド、
ransackは盗む、resultは結果、=は定義するという
Docker+Rails7+Mysqlの環境構築やってみた
# Docker
## Dockerとは
Dockerは、「**コンテナ型の仮想環境を作成、共有、実行するためのプラットフォーム**」です。### コンテナ is 何?
**コンテナとは**
* Dockerエンジンの上に立つ一つの箱
* 箱の中には特定したもの
* コンテナに何を入れるか、を考える### 簡単に言うと、マシン内の入れ物に任意のものを入れられる便利な箱!!
# 作ってみた!
### 任意のディレクトリを作成
“`shell
mkdir rails_docker && cd rails_docker
“`### 必要ファイルの作成
“`bash
touch {Dockerfile.dev,compose.yml,.env,Gemfile,Gemfile.lock,entrypoint.sh}
“`* Dockerfile.dev(DockerfileをDockerfile.devという名前で作成)
* compose.yml
* .env
* Gemfile
* Gemfile.lock
* entrypoint.sh###