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

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

Index name ‘Index name’ on table ‘Table name’ already existsって言われたとき

# はじめに
以下のマイグレーションエラーがよく起きてたけど、
対処法は毎度同じだったので手順を残す

## Index name {Index name} on table {Table name} already exists
`rails db:migrate`または`rails db:migrate:up VERSION={バージョン}`したときに、
上記のエラーメッセージで怒られる

## やったこと

テーブルまたはインデックスが本当にあるのか確認
“`cmd
$ docker compose exec db bash
$ mysql -u root -p
# パスワード入力

# 本当にテーブルがあるのか → あった
show columns from {Table name};

# そのテーブルに当該Indexはあるのか → あった
show index from {Table name};
“`

作成しようとしている所に作成しているあるから怒られると思う
ならば消してみる
“`cmd
# インデックスがあれば消す
alter table {Table nam

元記事を表示

mapメソッドを&:と一緒に使う時の方法

## mapメソッドってどんななの?
>各要素に対してブロックを評価した結果を全て含む配列を返します。
なので、計算してそれを配列で返してくれるメソッドですね。

ただ、良く
“`
members = organizations.map(&:member)
“`
というコードを見かけます。

これなんなん?って思っていたので、調べてみました。

“`
organizations.map { |org| org.member }
“`
が省力して書ける感じですね。これはよく中間テーブルとかで、経由先をまとめて取得したい時とかに使います。
イディオム的に覚えるしかないやつですね〜

## 参考記事

Ruby: アンパサンドとコロン`&:`記法について調べてみた

元記事を表示

sort_byをHashに対して使う時の話

## どんなメソッドなの?
>ブロックの評価結果を <=> メソッドで比較することで、self を昇順にソートします。ソートされた配列を新たに生成して返します。

なので、ArrayやHashで使って場合に、中身をソートして配列を返すってメソッドですね。

## 具体例
“`
# サンプルハッシュ
hash = { 3 => “apple”, 2 => “banana”, 5 => “cherry”, 1 => “date” }

# キーでソート
sorted_by_key = hash.sort_by { |key, value| key }
puts “Sorted by key (as array):”
p sorted_by_key

# 値でソート
sorted_by_value = hash.sort_by { |key, value| value }
puts “\nSorted by value (as array):”
p sorted_by_value
“`

こんな感じで使用できます。

ただ、Hashで使った場合は、配列になってしまうのでHashのまま扱い

元記事を表示

オリジナルアプリ(ウォンツ)の制作過程〜要件定義〜

## はじめに

こんにちは、今日もオリジナルアプリの制作過程を記録していきます。今日は要件定義についてです!
このシリーズの記事では、企画・要件定義から設計、実装、テストまでの全てのプロセスを詳細に説明します。毎日少しずつ進めていきますので、アドバイスや指摘があればぜひ教えてください。

## 要件定義

### 機能要件

#### ユーザー管理
– **ユーザー登録**: 名前、メールアドレス、パスワード、住所を入力して新規登録。
– **ログイン/ログアウト**: 登録済みユーザーがメールアドレスとパスワードでログイン。
– **ユーザープロフィール管理**: 名前、住所、メールアドレス、電話番号の変更機能。

#### 依頼管理
– **依頼内容**: タイトル、説明、カテゴリー、条件価格、画像をアップロードし、依頼の投稿。
– **依頼一覧表示**: 全依頼の一覧を表示、カテゴリーや価格帯でフィルタリング可能。
– **依頼条件詳細表示**: 依頼の条件の詳細情報(タイトル、説明、上限・下限価格、依頼者情報、着払い可否)を表示。
– **依頼検索**: 依頼している商品タイ

元記事を表示

view/devise/passwords/edit.html.erbとview/users/edit.html.erbの違い

# ①app/view/devise/passwords/edit.html.erb
## 目的
このファイルは、パスワードをリセットするためのビューを提供するためのもの。
ユーザーが「パスワードを忘れた」場合に、メールで送信されたリンクを使って新しいパスワードを設定するためのフォームとなる。

## 主な機能
・パスワードリセットトークンの入力
・新しいパスワードの入力
・パスワードの確認
・フォームの例

## 実装例
“`ruby:app/view/devise/passwords/edit.html.erb

Change your password

<%= form_with(model: resource, url: password_path(resource_name), method: :put, local: true) do |f| %>
<%= devise_error_messages! %>

<%= f.label :password, "New password" %>

元記事を表示

Macでちょっと考えて好きなRubyを使う方法

https://qiita.com/hana-da/items/b7afec4393440d74c17a

そうなんですよ。一番新しいのが一番いいやつなので、それを使っておくのがいいのですよ。。。

でもね、古風なのもよかったりするじゃないですか? 2.7.8 とか。

それ、できるよ。そう [rbenv](https://github.com/rbenv/rbenv) ならね。

# そもそも rbenv とは

[rbenv](https://github.com/rbenv/rbenv) とは様々なversionのRubyを共存(同時にインストール)させつつ、簡単にいい感じに切り替えて使えるようにするツールです。
そして [ruby-build](https://github.com/rbenv/ruby-build) とはrbenv環境用に様々なversionのRubyを簡単にインストールする仕組みです。

なので流れとしては

1. rbenv 自体を整える
2. ruby-build を整える
3. ご希望のRubyのversionを選ぶ
4. ご希望のversionのRu

元記事を表示

Rubyで配列の変更を防ぐ:インスタンスの共有とコピーについて

今回はRubyでの配列のインスタンス共有とコピーについて、実際の問題とその解決方法を紹介します。この記事では、特に`dup`メソッドを使って元の配列が変更されるのを防ぐ方法に焦点を当てます。

## 問題の背景
Rubyでは、変数にはオブジェクトの実体ではなく、そのオブジェクトへの参照が格納されます。したがって、ある変数を別の変数に代入すると、両方の変数が同じオブジェクトを参照することになります。これにより、どちらかの変数を通じてオブジェクトが変更されると、他方の変数でもその変更が反映されることになります。

例えば、以下のコードを見てください。

“`ruby:example.rb
original_array = [“apple”, “grape”]
save_array = []
p save_array = original_array
original_array[0] = “banana”
p original_array
p save_array
“`
このコードを実行すると、`save_array`に`original_array`を保存したと思いましたが、実際には

元記事を表示

Macで何も考えずに最新の一番いいRubyを使う方法

![Elshaddai_free_images056.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17434/02e12d6c-9ad8-6d58-0996-1933c6f7b090.jpeg)
**一番新しいRubyが一番速くて一番よいRuby**

という事で最新のRubyを何も考えずに入れて使う方法です。

最新のRubyは年に数回(2ヶ月に1回)リリースされるので、それに追従して最新のRubyを入れつづけやすいように [rbenv](https://github.com/rbenv/rbenv) というツールを使います。

# 下ごしらえ

基本的には https://github.com/rbenv/rbenv#basic-git-checkout に書いてある事をそのままやるだけなのですが、この記事では `何も考えずに` がウリなので何も考えなくていいように、何も考えずに以下のコマンドをターミナルへコピペしてください。

## まず rbenv をインストール

ターミナルを起動して以下

元記事を表示

Rubyで配列から複数の値を削除する

Rubyで配列から複数の値を削除する方法が分からなかったので調べました。

元となる配列base_listと削除したい文字が入っている配列delete_listは以下です。

“`
base_list = [1, 2, 2, 3, ‘hoge’, ‘fuga’, ‘piyo’] # 元の配列
# => [1, 2, 2, 3, “hoge”, “fuga”, “piyo”]

delete_list = [2, ‘fuga’] # 削除したい文字の配列
# => [2, “fuga”]

“`

## -(マイナス) 指定した配列の要素を取り除いた新しい配列を返す

「`-`」を使って、`元の配列 – 削除したい文字`とすることで、指定文字が削除された新しい配列が作成されます。

“`
new_list = base_list – delete_list
# => [1, 3, “hoge”, “piyo”]

“`

元の配列には変化はありません。

“`
base_list
# => [1, 2, 3, “hoge”, “fuga”, “piyo”]

“`

## *

元記事を表示

メール本文や件名から、必要な情報を抽出する

# はじめに

ワークフローの完了通知など、システムからメールで通知が送られてくるケースは多いかと思います。通知の受信をトリガーにした場合、メール本文や件名に含まれる情報を抽出する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3444315/cbc9b95a-d96d-a366-c815-5c74866dab96.png)

Workatoを使って、これらの情報をどのように抽出すればよいでしょうか?

# 正規表現を使えばメール本文から情報が抽出可能

正規表現 (regular expression) というものを使うと、メール本文のテキストから条件に合う部分を抽出することが可能です。フォーミュラモード (formula mode) を使えば、簡単に正規表現を使うことが可能です。

### そもそも正規表現とは?

正規表現は、英語では regular expression と呼び、文字列のパターンを指定するための記述方法です。特定の文字列を検索、置換、抽出したりす

元記事を表示

オリジナルアプリ(ウォンツ)の制作過程

こんにちは!この記事では、未経験からエンジニアを目指す初学者の私が、オリジナルアプリの制作過程を記録していきます。使用する言語はRubyとRailsです。これから(ほぼ)毎日の進捗や学びを投稿していきますので、アドバイスや指摘があればぜひ教えてください。

## 企画の練り方

まずは、アプリの企画を練ることから始めます。どんなアプリを作りたいのか、誰のためのアプリなのかを明確にすることが重要です。今日は具体的なユーザーペルソナを作成しました。

## 今日の進捗:ペルソナの作成

### ペルソナ: 田中 和也 (Kazuyuki Tanaka)

| 項目 | 詳細 |
|———————-|———————————————————————-|
| **一般情報** |

元記事を表示

Ruby 特異メソッドについて

# はじめに

#### ※以下の内容には誤りが含まれる可能性があります

# 特異メソッドとは何か

Rubyにおける特異メソッドは、特定のオブジェクトだけが持つ独自のメソッドです。

要するに、そのメソッドは定義したオブジェクトに対してのみ使用可能で、他のオブジェクトでは使用できないということです。

# 特異メソッドの書き方

“`
str = “hello”
def str.greet
puts”Hello,world!”
end

str.greet #=> Hello,world!
“`
ここで”greet”メソッドは”str”オブジェクトに対してのみ定義されているので他の文字列オブジェクトではこのメソッドは使用できません。

# まとめ

Rubyの特異メソッドは強力なツール。

ですが使用には慎重になるべきです。

特異メソッドは定義したオブジェクトに対してのみ存在し、他の同じクラスのオブジェクトには影響を与えない。

つまり、同じクラスの異なるオブジェクトに対して同じ動作を
期待する場合、それぞ

元記事を表示

変数・値・参照・代入

# これは何?

変数ってなに? という話。
値なのか、参照なのか、代入したらどうなるのか、とか。そのあたり。

# いくつかの言語の事例

いくつかの言語の事例を書いてみる。

## C言語の場合

C 言語の変数は(概念としては)型が付与された一連のメモリである。この文脈ではオブジェクトと言ってもいい。
変数の型が決まれば、バイト数が決まる。

オブジェクトの正体は、構造体かもしれないし、ポインタかもしれない。

「概念としては」と書いたのは、コンパイルの結果その変数自体が消滅したり、いろいろあり得るから。

C言語では、同じ「一連のメモリ」を別の変数が直接指すということはできない。そうしたければポインタを使う。
あるいは `union` を使えば異なるメンバが同じ「一連のメモリ」を指すことが出来る。

Pascal なんかも同じだと思う。

“`C:C
a=b;
“`

という代入文は、暗黙の型変換が入らない場合「b が指す一連のメモリを a が指す一連のメモリにコピーする」という意味になる。
つまり、代入が行われても依然として a は b と別のもの(アドレスが異なる)であ

元記事を表示

【Ruby】ハノイの塔 (paizaランク A 相当)をやってみた

“`ruby
# ハノイの塔の状態を追跡するクラス
class Hanoi
attr_accessor :rods

# 初期化メソッド
def initialize(n)
@n = n
@rods = { “A” => (1..n).to_a.reverse, “B” => [], “C” => [] }
end

# ディスクの移動メソッド
def move_disk(from, to)
disk = @rods[from].pop
@rods[to].push(disk)
end

# ハノイの塔の再帰的な解法
def solve_hanoi(n, from, to, aux, t, move_count)
return move_count if move_count >= t

if n == 1
move_disk(from, to)
move_count += 1
return move_count if move_count >= t
els

元記事を表示

【Ruby】配列の結合方法について

## はじめに
簡単なトランプゲームを作りました。その際、配列の結合方法が分からず調べたのでまとめておきます。
本記事では、実際にコードを書く際に試した方法を紹介します。

## Rubyでの配列の結合方法
### +演算子
+演算子を使って、2つの配列を結合することが出来ます。この方法では、新しい配列は作成され、元の配列は変更されません。
“`ruby
array1 = [1, 2, 3]
array2 = [4, 5, 6]
new_array = array1 + array2
puts new_array.inspect
#=> [1, 2, 3, 4, 5, 6]
“`
### concatメソッド
concatメソッドは、元の配列を変更して、指定した配列を末尾に追加します。
“`ruby
array1 = [1, 2, 3]
array2 = [4, 5, 6]
array1.concat(array2)
puts array1.inspect
#=> [1, 2, 3, 4, 5, 6]
puts array2.inspect
#=>[4, 5, 6]
“`
##

元記事を表示

Rubyにおけるモジュールとは

<目次>
– [<Rubyリファレンスマニュアル – モジュール定義>](#rubyリファレンスマニュアル—モジュール定義)
– [<クラスとモジュールの共通点>](#クラスとモジュールの共通点)
– [1. モジュールの定義](#1-モジュールの定義)
– [2. 定数の定義](#2-定数の定義)
– [3. 例外処理](#3-例外処理)
– [<クラスにしかできないこと>](#クラスにしかできないこと)
– [1. インスタンスの生成](#1-インスタンスの生成)
– [2. 継承](#2-継承)
– [3. インスタンス変数とアクセサメソッド](#3-インスタンス変数とアクセサメソッド)
– [<モジュールにしかできないこと>](#モジュールにしかできないこと)
– [1. ミックスイン](#1-ミックスイン)
– [2. 名前空間の提供](#2-名前空間の提供)
– [<そもそも継承とは>](#そもそも継承とは)
– [<多重継承について>](#多重継承について)
– [多重継承のデメリット](#多重継承のデメリット)
– [<Ruby

元記事を表示

【Rails】each, find_each, find_in_batches の違い

# 前提
– 環境
– Ruby:`2.5`
– Rails:`4.2`
– 少々古めのバージョンになります
– ただ、次世代のバージョンにおいても本記事が参考になれば幸いです
– 今回扱うデータ
– ***company.rb***
– `has_many :shops`
– ***shop.rb***
– `belongs_to :company`
– データ数
– 事前に取得する ***company*** の件数を`50`件とします

つまり、下記コードで取得される***company***の件数が`50件`という前提で進めます。
“`rb
Company.joins(:shops).where(shops: { prefecture: ‘東京都’ }).distinct
“`

# each

“`rb:メインの確認コード
companies.each.with_index(1) do |company, i|
puts “loop_count: #{i}, company_id: #{company.id}”

元記事を表示

Rubyで発生した例外クラスをまとめてみた

# はじめに
Rubyでコードを書いていて発生したエラーを自分用にまとめてみました。

# NameError
定義されていない変数や定数を呼び出そうとすると発生するエラー。
呼び出す変数の名前を間違ったりしてよく起こしました。

“`ruby:変数名の間違い
name = “Taro”
#nameがnamaになっている
p nama
“`
“`:出力
undefined local variable or method ‘nama’ for …(NameError)
“`

# NoMethodError
メソッド名を間違えた時や、呼び出せないメソッドを呼び出そうとしたときに発生するエラー。
個人的にはレシーバが想定に反してnilになっている場合が多かったです。

“`ruby:メソッド名の間違い
a = [1, 2, 3]
#eachがeechになっている
a.eech do |n|
sum += n
end
“`
“`:出力
undefined method `eech’ for … (NoMethodError)
“`
“`ruby:privat

元記事を表示

[Rails] マークダウン形式でtext_areaに入力できるようにする

# commonmarker

– `gem commonmaker`をインストール
“`
gem ‘commonmarker’
“`
– helperに下記を記述
“`module ApplicationHelper
def markdown_to_html(text)
html = Commonmarker.to_html(text)
raw(html)
end
end
“`
– 例)show.html.haml
“`
= markdown_to_html(“# CommonMarker”)
“`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842957/fd44edd2-6589-33c2-5658-d29cded00577.png)

### 参考URL
https://github.com/gjtorikian/commonmarker

思いのほかサクッと実装できました。
何かご指摘あればお願いします!

元記事を表示

each_with_indexメソッド

each_with_indexメソッドを用いると、繰り返し処理の中で、配列の添え字も扱うことができる。

“`
animals = [“dog”, “cat”, “fox”]

animals.each_with_index do |animal,index|
puts “#{index}:#{animal}”
end
“`

これを実行すると、以下の結果になる。
“`
0:dog
1:cat
2:fox
“`

スタートを1からにしたい場合はindex+1とすると1から始めることができる。
“`
animals = [“dog”, “cat”, “fox”]

animals.each_with_index do |animal,index|
puts “#{index + 1}:#{animal}”
end
“`
“`
1:dog
2:cat
3:fox
“`

元記事を表示

OTHERカテゴリの最新記事