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

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

【Rails】furimaアプリ 商品情報編集機能 #1

# 実装概要
画像を含む商品の情報を編集する機能を実装

### ルーティングの設定
“`ruby:config/routes.rb
# 中略
resources :items, only: [:index, :new, :create, :show, :edit]
“`
### editアクションをコントローラーに定義
“`ruby:app/controllers/items_controller.rb
# 中略
def edit
@item = Item.find(params[:id])
end
“`
### editページの編集
`new.html.erb`ファイルと同様のコードを記述(コード内容は割愛)

### updateアクションのルーティングを設定
“`ruby:config/routes.rb
resources :items, only: [:index, :new, :create, :show, :edit, :update]
“`

### updateアクションをコントローラーに定義
“`ruby:app/controllers/item

元記事を表示

ActiveRecord::RecordNotFound in CardsController#showを解決した話。

# 『Ruby on Rails6 超入門』(2020年、秀和システム)の207ページで止まってしまいました。

# 前提
`ruby 2.7.7p221 (2022-11-24 revision 168ec2b1e5) [x86_64-linux]`
`Rails 6.1.7.10`

# 詰まっている箇所(Chapter3-4 読書カードを作ろう routes.rbを修正する)

当該箇所のルーティング情報がいけていなかったので、
resourcesを使って、書き直したところ、下記のエラーが出て詰まってしまいました。

ActiveRecord::RecordNotFound in CardsController#show

`resources :cards, only: [:index, :show, :new, :create, :edit, :update, :destroy]
`

# 聞きたいことの一行まとめ

なぜshowアクションを見ることができないのか?

# 問題解決するために試したこと

resourcesに`:add`を加筆する→ダメ

# 解決方法

ro

元記事を表示

【Rails】furimaアプリ 商品詳細表示機能 #1

# 実装概要
– 商品詳細表示ページにて、商品の詳細情報を表示する

### ルーティングの設定
“`ruby:config/routes.rb
# 中略
resources :items, only: [:index, :new, :create, :show]
# 中略
“`

### showアクションをコントローラに定義
“`ruby:app/controllers/item_controller.rb
# 中略
def show
@items = Item.find(params[:id])
end
# 中略
“`

ここでmainブランチに`「ルーティングの設定」` `「showアクションをコントローラーに定義」`の2つをcommit&pushしてしまっていることに気づく

解決策を下記に記載していく

### 新しいブランチを作成
ターミナル
“`
% git checkout -b 商品詳細表示機能
“`

### 新しいブランチをプッシュ
ターミナル
“`
% git push -u origin 商品詳細表示機能
“`

### mainブラ

元記事を表示

【Rails】エラー「ArgumentError: Relation passed to #or must be structurally compatible. 」とorメソッドについて

# はじめに
ActiveRecordで関連先のテーブルのデータを取得したい時があると思います。カラムを絞り込む時の条件も複数指定しなければいけない時もあると思います。

そんな時にもActiveRecordのorメソッドを使うことができます。
その際の注意点について発生したエラーも参考にしながら、紐解いて説明していきます。

# 前提条件
## リレーション
– Userモデル: ユーザーを表すモデル
– Postモデル: 投稿を表すモデル
– 1人のユーザーが複数の投稿を持つ(1対多の関係)

“`models/user.rb
class User < ApplicationRecord has_many :posts end ``` ```models/post.rb class Post < ApplicationRecord belongs_to :user end ``` # エラー内容 ``` ArgumentError: Relation passed to #or must be structurally compatible. Incompatible

元記事を表示

Rubyよく経験したエラー

エラー分を翻訳して一覧表示させています。

`Active Record::RecordNotFound`
エラー文
Couldn’t find Model with ‘id’=123
意味
指定されたIDがデータベースに存在しない

`NoMethod Error`
エラー文
undefined method ‘xxx’for nil:NiClass
意味
変数がnilまたはメソッドが未定義である。

`Name Error`
エラー文
uninitialized constant Model Nmae
意味
クラスが正しく定義されていない

`Active Record::Unknown Attribute Error`
エラー文
unknown attribute ‘xxx’for Model
意味
モデルに存在しないカラムが使用されている

`Routing Error`
エラー文
No route matches [GET]”/path”
意味
routes.rbに適切なルーティングを設定できていない

`Action View::Template::Error`
エラー文

元記事を表示

【Rails】Google map APIの処理の流れ

:::note warn
GoogleマップAPIを実装したので、処理の流れを備忘録として残します。
実装方法の解説ではないため、前提部分は省きます。
※あくまで、処理の流れをメインに記載します。細かい関数やメソッドの意味にはあまり触れませんので、わからないところは調べてください。
:::

### なぜ処理の流れに特化したのか?
私個人の考えですが、実装の仕方を理解するのに処理の流れが一番大事だと感じたからです。
関数の意味やメソッドの使い方も大事ですが、今の時代少し調べたら情報は出てきます。
初学者の私が、実装するのに処理の流れやルールを覚えたら他の理解がしやすかったからです。

##### 今回の内容の前提
・Google cloud platformに登録していること
・請求情報が登録されていること
・Maps Javascript API・Geocoding APIを有効化していること
・ APIキーを.envで定義していること
・gem ‘geocoder’が適用されていること
・dotenv-rails,yarn add dotenvがインストールされていること
・フ

元記事を表示

【Rails】furimaアプリ 商品一覧表示機能 #1

# 実装概要
– 商品一覧表示機能を実装する

### ルーティングの設定
“`ruby:config/routes.rb
# 中略
resources :items, only: [:index, :new, :create]
# 中略
“`

### コントローラー内にindexアクションを記述
“`ruby:app/controllers/items_controller.rb
def index
@items = Item.all
end
“`

### eachメソッドを使って、商品情報を表示する
“`ruby:app/views/items/index.html.erb
# 中略

    <% @items.each do |item| %>

  • <%= image_tag item.image, class: "item-img" %>

元記事を表示

【Ruby on Rails】Active Jobをsidekiqで使ってみる

## 環境
以下に後述のredisを加えて利用

https://qiita.com/kandalog/items/b8f001a02c8b95ae2fcc

## Active Jobとは?
Railsガイドから抜粋
> Active Jobは、ジョブを宣言し、それによってバックエンドでさまざまな方法によるキュー操作を実行するためのフレームワークです。

端的に言えば、時間のかかる処理を非同期に実行するための仕組みです。

キューの管理に使われるライブラリには[sidekiq](https://github.com/sidekiq/sidekiq)や[resque](https://github.com/resque/resque)等複数存在しますが、Active Jobがそれぞれの違いを吸収してくれることで、統一のインターフェースでの利用が可能です。

Railsでメールを送信するための機能であるAction MailerはActive Jobに依存しています。

## 準備

### 1 Queueing Backendとしてsidekiqのgemをinstall
“`shel

元記事を表示

【Rails】furimaアプリ 商品出品機能実装 #4

# 実装概要
– コードレビュー後の指摘部分を修正
– 商品の出品に失敗して出品ページに戻った際もjavascriptが動作するよう、renderメソッドに対応したイベントを追加
– priceカラムは、整数のみ保存が行われるようバリデーションを追加
理由:現状の記述だと、小数の販売価格が保存できてしまうため
– カテゴリーの選択肢が見本アプリと異なるようなので、確認の上、コードを修正

### 商品の出品に失敗して出品ページに戻った際もjavascriptが動作するよう、renderメソッドに対応したイベントを追加

“`ruby:app/javascript/items_new.js
function setPriceEventListener() {
const priceInput = document.getElementById(“item-price”);
const addTaxDom = document.getElementById(“add-tax-price”);
const profitDom = document.getElem

元記事を表示

【Rails】furimaアプリ 商品出品機能実装 #3

# 実装概要
– itemモデルの単体テストを実施

### item情報をFactoryBotで指定
“`ruby:spec/factories/items.rb
FactoryBot.define do
factory :item do
name { Faker::Name.initials(number: 2) }
description { Faker::Lorem.sentence }
category_id { 2 }
status_id { 2 }
shipping_fee_id { 2 }
prefecture_id { 2 }
delivery_time_id { 2 }
price { 500 }

association :user

after(:build) do |message|
message.image.attach(io: File.open(‘public/images/test_image.png’), filename: ‘test_image.p

元記事を表示

【Rails】furimaアプリ 商品出品機能実装 #2

# 実装概要
– JavaScriptを使用して商品出品ページの販売価格を入力すると販売手数料(10%)と販売利益が自動で表示される機能の実装。
– データが保存され、エラーがある際はエラー文が表示される機能の実装。

### jsファイルの作成
app/javascriptディレクトリ配下にitems_new.jsファイルを作成。

### items_newファイルの読み込みができるように設定

items_new.jsファイルをアプリに「ピン留め(固定)」し、ページや機能の中で使えるようにするため下記コードを追記。
“`ruby:importmap.rb
# 中略
pin “items_new”, to: “items_new.js”
“`
### items_new.jsの機能を実際に使うために読み込むコードを追記
“`ruby:app/javascript/application.js
# 中略
import “items_new”
“`

### items_new.jsファイルの編集
“`ruby:app/jabascript/items_new.js
docu

元記事を表示

alba用の”rails g alba hoge”みたいなジェネレータを作った

# はじめに
みなさん、こんにちは **torihazi**です

今日は昨日初めて知ったRailsの自作ジェネレータを実際に使ってみたということで練習がてら作ってみました

昨日の時点で便利では?と思ったので今後も使っていきたいと思います

ちなみにalbaはこれです。Railsのシリアライザ?です。

https://github.com/okuramasafumi/alba

# 経緯
今作っているXクローン用に昨日ずっとRailsのSerializerを探していて、jsonapi-serializerとか色々触ってみたのですがどれも「うーん」ということで辿り着いたのが **alba**でした。

その時の体験記がこれです。

このついでに毎回ファイル手動で作るのだるいとなって`rails g serializer`があることを知り、さらにこの”ジェネレータ”自体が自分でも作れるのを知りました。

で、albaが見てみた感じなさそうだったのでその時得た知識をもとに作ってみよう

元記事を表示

【Rails】RSpecとCapybaraの違いがわからなかったので調べました by Genspark & GPT-o1-mini

どうもこんにちは。

Kaigi on Railsに参加していて、CapybaraとRSpecの違いがわかっていなかったので、AIで調べてみました。

:::note warn
この記事は**ALL 生成AI**で作ってみました。
:::

## はじめに

ソフトウェア開発において、テスト自動化は品質向上と開発効率の向上に欠かせない要素です。RubyやRuby on Railsでの開発において特に人気のあるテスト自動化ツールとして、**RSpec**と**Capybara**があります。本記事では、これらのツールの概要や役割の違い、具体的な使用方法について詳しく解説します。

### RSpecとは

**RSpec**は、RubyおよびRuby on Railsアプリケーションのテスト自動化を支援するためのフレームワークです。RSpecを使用することで、ユニットテスト、機能テスト、統合テストを効率的に記述・実行することが可能になります。RSpecは、以下の特徴を持っています:

– **ユニットテストのサポート**: 個々のメソッドやクラスの動作を検証します。
– **機能テストの

元記事を表示

Google Cloud が提案するベストプラクティスに沿ったデータベース設計

Google Cloud blog が公開している [ユーザー アカウント、認証、パスワード管理に関する 13 のベスト プラクティス2021 年版](https://cloud.google.com/blog/ja/products/identity-security/account-authentication-and-password-management-best-practices) (以下、元記事)を参考にして、特にデータベースに特化した実装案を考えてみる。

## 認証要素の分離と内部グローバル ID の活用

元記事では、データベース設計のベストプラクティスとして「柔軟なユーザー管理のために認証要素を分離すること」と「そのためには内部グローバル ID を活用すること」が紹介されている。

上記の要素について言及している箇所を抜粋する。

> ユーザー ID とユーザーアカウントのコンセプトを分離する。(中略)適切に設計されたユーザー管理システムでは、ユーザーのプロファイルの各部分間の結合度が低く、凝集度が高くなる。(中略)各ユーザーに抽象的な内部グローバル ID を設定

元記事を表示

Rakeタスク...タスク(作業)の自動化について

# はじめに
この記事は、Ruby on rails 初心者が備忘録として作成したものです。なにか間違い等ありましたら、ご指摘よろしくお願いします。

# Rakeタスクとは?
– **Rubyコードでタスクとして作成し、必要なときに実行することができる**
 => Rake は Ruby のビルドツールで、タスク(作業)を自動化
– **この時に実行する処理内容がrakeタスク**
 =>`Rakefile`に定義
– **Rake タスクの用途**
 =>データベースの初期化や更新
   定期的なデータのクリーンアップや集計
   バッチ処理の実行
   テストの実行や自動化されたタスクの実行 等々…

`要するに、定期的なメール送信、古いデータのクリーニング(例:x日以上経ったログデータや不要なキャッシュを削除する処理)、記事等の自動公開が可能に。`

– **Rake と Whenever の連携**
Rakeタスクは単体では手動でコマンドを実行する必要がありますが、Wheneverを使うと、任意のタイミングで自動で実行できるようになる。
#

元記事を表示

Ruby on Railsの自分用覚書

## 1.コントローラ(Controllers)
ファイル場所:`app/controllers/`
ユーザーからのリクエストを受け取り、モデルやビューと連携する。
“`users_controller.rb
class UsersController < ApplicationController def index @users = User.all end def show @user = User.find(params[:id]) end end ``` ## 2.モデル(Models) ファイル場所:`app/models/` データベースとやり取りするためのクラス。ActiveRecordを使う。 ```user.rb class User < ApplicationRecord validates :name, presence: true end ``` ## 3.ビュー(Views) ファイル場所:`app/views/` HTMLやJSONなどの出力をする。コントローラから渡されたデータを使って表示。 ```app/vie

元記事を表示

Rails ActiveRecordの自己結合:タスク管理アプリ

## 読んで欲しい人
– Railsで自分のテーブルを参照してリレーションを組みたい人
– 例:Userモデル内でそれぞれ役職があって、その関係性を表現したい!
– 上司と部下
– プロジェクトとタスク
– 過去の俺
## 今回のケース
– タスク管理アプリでTaskがTaskを無限に持てるようにしたいなぁ
## やり方
“`ruby
class Task < ApplicationRecord has_many: sub_tasks, class_name: 'Task', foreign_key: 'parent_id', dependent: :destroy belongs_to :parent, class_name: 'Task', optional: true end ``` ## 解説 ```ruby has_many: sub_tasks, class_name: 'Task', foreign_key: 'parent_id', dependent: :destroy ``` - TaskはTaskを複数持てるをそのまま、has_many :t

元記事を表示

Railsで`before_filter`が`before_action`に変更された理由と対処法

## はじめに

Rails 5以降で、`before_filter`が廃止され、`before_action`に変更されました。この変更により、古いコードをそのまま使おうとするとエラーが発生します。この記事では、この変更の理由と簡単な対処法を紹介します。

## 変更の理由

– **一貫性**: 他のフィルタ(`after_action`や`around_action`)と命名を統一するために変更されました。
– **直感的な名前**: `before_action`という名前の方が、アクションの前に実行するという意味が明確です。

## 対処法

`before_filter`を使用している場合、`before_action`に置き換えるだけです。

### 変更例

**変更前**:
“`ruby
before_filter :authenticate_user
“`

**変更後**:
“`ruby
before_action :authenticate_user
“`

このように、`before_filter`をすべて`before_action`に書き換えて

元記事を表示

【Rails】 scopeについて

# Railsにおけるscopeの定義方法

scopeは、よく使うクエリを簡単に定義し、再利用可能にするための機能です。この記事では、scopeの定義方法や使い方について、通常のメソッドとの違いを交えて説明します。また、scopeの使用に対する現場での考え方の違いについても触れます。

## scopeの基本構文

scopeは通常のメソッドと少し異なりますが、シンプルに定義できます。基本構文は以下の通りです。

“`ruby
scope :スコープ名, -> { 処理 }
“`
###### :スコープ名
scopeの名前を指定します。メソッドのように呼び出し時に使います。
###### -> { 処理 }
無名関数(ラムダ)を使って、処理内容を記述します。whereやorderなどのActiveRecordメソッドを組み込むことができます。

無名関数(ラムダ)の詳細については、こちらを参照してください。
https://qiita.com/Yaaaaa_meat/items/a7a5502b890ab4c5e181

以下の例では、価格が500円以下の本を取得するsc

元記事を表示

rails g serializer の再発明。(jsonapi_serializerでも使えることを知らなかった)

# はじめに
みなさん、こんにちは **torihazi**です

今日はもしかしたら車輪の再発明みたいなことをしてしまったかもしれません。

あるの知りませんでした。

jsonapi_serializerを使っていて

`rails g serializer user`みたいなことをするときに

できないんじゃね?と思ってしまってあーだこーだしながら作ってみました。

今調べたらあったみたいです。

# 経緯
rails g serializer hogeみたいにしたらserializersディレクトリ配下に

hoge_serializer.rbみたいなファイルができて欲しかったので

それをコマンドラインからできる術を調べていました。

なにしろめんどくさかったので。

とりあえず`rails generate generator hoge`を使うと

`lib/generaters/hogeディレクトリ`とか色々作られることがわかりました。

んで、active_model_serializersだとそれがあるけど

jsonapi_serializerだとそれがないから作る

元記事を表示

OTHERカテゴリの最新記事