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

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

【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

元記事を表示

【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ブラ

元記事を表示

【初学者】オブジェクト指向とは?

オブジェクト指向について理解が浅かったので、記事にすることで少しでも理解を深めようという目的で書きました。

## オブジェクト指向とは?
オブジェクト指向とは、「変更に対して柔軟に対応するための開発手法」です。
各オブジェクトに責務を任せることでコードが理解しやすく、変更や機能追加もしやすくなります。

オブジェクト指向を理解するために重要な要素が3つあります。「継承」「ポリモーフィズム」「カプセル化」です。
それぞれについて解説していきます。

## 継承
継承とは、共通の振る舞いを抽象化してまとめることです。
継承することで、親クラスの変数やメソッドが子クラスへ引き継がれます。
これによって、複数のクラス間で同じ機能を再利用しやすくし、コードの重複を減らすことでメンテナンスも簡単にすることができます。
“`ruby
class Product
def initialize(name, price)
@name = name
@price = price
end

def show_info
“商品名: #{@name}, 価格: #{@pri

元記事を表示

よく見かけるクラスからnewしたオブジェクトについて

# 概要
クラスからnewしたオブジェクトが戻り値として帰ってきた場合、以下のような表記を見ることが多いと思います。
“`rb
class Test

end
“`

“`rb
(ruby) t = Test.new
#
(ruby) t.class
Test
“`

クラス自身の戻り値は、クラス自身が返ってきます
“`rb
(ruby) Test
Test
“`

クラスからnewしたオブジェクトをto_sすると、Stringクラスのオブジェクトになります。
“`rb
(ruby) t.to_s
“#
(ruby) t.to_s.class
String
“`

# まとめ

個人的に
“`rb
#
“`
こういう表記を見た時に「これはnewされたインスタンス自身である」という事を意識できないことがあり、記事を書きました。

単純ではありますが、パッと見た時にこれがなんであるのか、気づけるようになりたいと思います

元記事を表示

ruby Array#permutation メソッド

# Array#permutationとは

### 1.配列の順列を全て返す

“`ruby
arr = [1,4,6]
pp arr.permutation.to_a
“`
“`terminal:結果
[[1, 4, 6], [1, 6, 4], [4, 1, 6], [4, 6, 1], [6, 1, 4], [6, 4, 1]]
“`

引数に数字を渡すと、その長さの順列を返してくれます。

“`ruby
arr = [1,4,6]
pp arr.permutation(2).to_a
“`
“`terminal:結果
[[1, 4], [1, 6], [4, 1], [4, 6], [6, 1], [6, 4]]
“`

※範囲以上の数字を渡すとnilです。
“`ruby
arr = [1,4,6]
pp arr.permutation(4).to_a
“`
“`terminal:結果
[]
“`

また、返り値はArrayではなくEnumeratorが返るので、配列として取得してしまいたい場合はto_aが必要になります。

https://docs.

元記事を表示

【Ruby】レシーバとは

# はじめに
こんにちは、現在アメリカの大学に行って語学を学びながらソフトウェアエンジニアになるために独学で勉強しているものです。
本日はRubyを勉強しているとよく出てくる、メソッドについて整理していきます。
というのも、現在progate→ゼロから分かるRuby→たのしいRubyと段階を追って勉強しているのですが、レシーバについて詳しく触れる機会がなく何となくでここまで進んでしまっているので
`rails`に入る前に定義をしっかり確立していきたいと思います。

# レシーバ
レシーバとは、メソッドが呼び出される際に、そのメソッドを実行するオブジェクトです。
オブジェクト指向プログラミングでは、オブジェクトが持つメソッドを呼び出す際、どのオブジェクトに対してメソッドを実行するのかをレシーバが決定します。

“`ruby:receiver1.rb
str = “hello” # str は String クラスのオブジェクト
str.upcase # str がレシーバとなり、upcase メソッドが呼ばれる
“`
ここでは、`hello`というStringオブジェク

元記事を表示

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】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

元記事を表示

[大人の自由研究]Rubyのmapとmap!の違いとパフォーマンス比較

こんにちは。
泡アハです。

仕事では主にRubyを使って開発しているのですが、
まだ始めて7ヶ月ほどなので、わからないことも多いです。

日々勉強の毎日ですが、
“`
mapを使うとき、mapを使うのとmap!を使うのどちらがよい?
“`
とふと疑問に思いました。

色々調べた結果、基本的には、
“`
参照先を直接いじりたい -> map!
元の変数には変更を加えたくない -> map
“`
という使い分けで問題ないようです。

ただ、これ動作速度的にはどういう違いがあるのだろうと疑問に思ったので、
大人の自由研究と題して、調査してみました。

## そもそもmapとmap!の違い
### 公式サイト
公式サイトを見てみます。

map
> 各要素に対してブロックを評価した結果を全て含む配列を返します。
> 出典: https://docs.ruby-lang.org/ja/latest/class/Array.html#I_COLLECT

map!
> 各要素を順番にブロックに渡して評価し、その結果で要素を置き換えます。
> 出典: https://docs.ruby

元記事を表示

ユーザー名の表示”#{@item.user.nickname}” 【備忘録】

下記の#や{}を使う意味が全く分からなかったので調べてみました。

“`app/views/items/show.html.erb
“#{@item.user.nickname}”
“`
### この記述でitemsテーブルのnicknameカラムの値を表示させている。
“#{@item.user.nickname}”の記述は、商品を出品したユーザーのニックネーム(nickname)を表示するためのもの。

文字列の中でインスタンス変数の値を埋め込む方法を使っている。
#{}の中にコードを入れると、その中のコードが評価され、文字列として展開される。

1.@item は、items_controller.rb の show アクションで取得した特定の Item レコード。
2.@item.user は、Item と関連付けられた User レコードを参照している。
 (belongs_to :user のアソシエーションがある場合)。
3.@item.user.nickname は、User モデルの nickname カラムの値、つまりユーザーのニックネーム。
4,”#{}”

元記事を表示

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

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

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

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

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

元記事を表示

【Ruby】Procとlambdaの違いまとめ

どうもこんにちは。

今回は、RubyGoldで出てきそうな`Proc`と`lambda`についてまとめました。

# `Proc`と`lambda`の比較表

もう先に比較表を載せておきます。

| 特徴 | lambda | Proc |
| — | — | — |
| 引数のチェック | 厳格にチェック。引数が不足または過剰だとエラー | 引数の数に寛容。足りない場合はnilを補完する |
| returnの動作 | lambda内でのみ終了し、呼び出し元に戻る | 呼び出し元全体からreturnする |
| 作成方法の違い | lambdaまたは->で定義 | Proc.newで定義 |

# `lambda`

## `lambda`の基本構文

`lambda`を使うことで、引数を受け取る無名関数を作成できます。以下は、`lambda`の一般的な構文です。

“`rb
my_lambda = lambda { |x, y| x + y }
“`

または、短縮形で->(ラムダリテラル)を使うこともできます。

“`rb
my_lambda = ->(x,

元記事を表示

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

元記事を表示

【Ruby】メソッドとは

# はじめに
こんにちは、現在アメリカの大学に行って語学を学びながらソフトウェアエンジニアになるために独学で勉強しているものです。
本日はRubyを勉強しているとよく出てくる、メソッドについて整理していきます。
というのも、現在progate→ゼロから分かるRuby→たのしいRubyと段階を追って勉強しているのですが、メソッドを深堀したり自分の中での定義を確立する機会がありませんでした
改めて時間をとってメソッドについてまとめていきたいと思います。

# メソッド
メソッドは、オブジェクトに対して行える処理や動作を定義するものです。
Rubyではメソッドはオブジェクトの動作を記述し、オブジェクトに対して呼び出すことができます。
Rubyのメソッドは、基本的に「メソッド名と引数を受け取って、特定の処理を行い、結果を返すもの」として機能します。
また、メソッドは大きく3つの種類に分類されます。

* 関数メソッド
* インスタンスメソッド
* クラスメソッド

### 関数メソッド
Rubyでは、特定のクラスに属さないメソッドを定義することもできます。
これを関数メソッドと呼び、トップレベ

元記事を表示

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

元記事を表示

Rubyで`URI.escape`エラーを解決するパッチの紹介

## はじめに

Rubyを使用しているプロジェクトで、`URI.escape`メソッドを使っていないにもかかわらず、以下のエラーが発生しました。

“`
undefined method `escape’ for URI:Module
“`
###### escapeの使用箇所が見当たらないで、探すのは諦めてパッチを当てることにしました。
`URI.escape`はRuby 2.7以降で非推奨となり、Ruby 3.0で削除されています。そのため、古いコードや依存ライブラリが`URI.escape`に依存しているとエラーが発生することがあります。この記事では、`URI.escape`が使えない環境でこのエラーを解決するためにパッチを当てる方法を紹介します。

## 解決方法

以下のコードを使用して`URI.escape`メソッドを自前で定義することで、エラーを解決できます。このパッチは`config/initializers/functions_overrides.rb`に追加します。

### コード

“`ruby:config/initializers/functions

元記事を表示

Railsマイグレーションの基本:複数カラムの追加と注意点

こんにちは!社会人1年目の初心者エンジニアです。
最近、データベースのスキーマを変更するためにマイグレーションを利用することが多くなりました。
この記事では、テーブルに複数のカラムを追加する方法と、マイグレーションを実行する際の注意点について説明します。

# 1. change_table を使って複数カラムを追加する
新しいカラムを追加する際、change_tableメソッドを使うと、複数のカラムを一度にまとめて追加できます。以下は、employeesテーブルにphone_numberとdepartmentを追加するマイグレーションの例です。
“`
class AddColumnsToEmployees < ActiveRecord::Migration[6.0] def change change_table :employees do |t| t.string :phone_number, comment: '電話番号' t.string :department, comment: '部署名' end end end ``` #

元記事を表示

OTHERカテゴリの最新記事