Ruby関連のことを調べてみた2022年07月04日

Ruby関連のことを調べてみた2022年07月04日

Mysql2::Error: Duplicate column name ‘xxxx’が出たときは既にあるカラムを消そう

# 背景
あるテーブルに3つのカラム追加する実装。

## 一度migrateでエラー
“`zsh
$ rails db:migrate
Mysql2::Error: Unknown column ‘xxx’ in ‘zzz’: ALTER TABLE `zzz` ADD `xxx` varchar(255) COMMENT ‘xxx’ AFTER `xxx`
“`

原因としてあるカラムを追加する際に、afterを使用してカラム位置を指定したが、その指定したカラム名を間違っていたためエラーを吐いていた。

再度、カラム名を修正してmigrateすると

“`zsh
$ rails db:migrate
Mysql2::Error: Duplicate column name ‘xxx’: ALTER TABLE `zzz` ADD `xxx` varchar(255) COMMENT ‘xxx’ AFTER `zzz`
“`

エラーを吐いていたが、エラー前に実行されたadd_columnでカラム追加されていた様で
同じカラムが存在していると再度エラーになった。

# 対処法

元記事を表示

Ruby 練習問題2 ~二重ハッシュ~

こんにちは、プログラミング初学者”fujitacoma”です!

今回は、Ruby練習問題シリーズの2回目です。
1回目より少しは難易度上がったかな、、?

それでは早速始めます!

# 問題
配列の内部に、複数のユーザーの情報をハッシュとして持つ変数user_dataがあります。
“`ruby
user_data = [
{user: {profile: {name: ‘George’}}},
{user: {profile: {name: ‘Alice’}}},
{user: {profile: {name: ‘Taro’}}},
]
“`
user_dataを利用して、全てのユーザーの名前だけが出力されるようにRubyでコーディングしてください。
ただし、出力結果は次のようになるものとします。
“`
George
Alice
Taro
“`

# 回答と解説

### 模範解答
“`ruby
user_data.each do |u|
puts u[:user][:profile][:name]
end
“`
もしくは
“`ruby
user_data.

元記事を表示

100日後くらいに個人開発するぞ!day050

## 今日は引数を学んでみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/d0ac2ad0-346b-3f06-e1e2-f7988a2f4ff1.png)

## Ruby学習レッスンIIIを修了!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/6d27f32f-45d9-d656-b88d-b9a123f7fce4.png)

## 今日の学び

### キーワード引数
* キーワード引数を用いた書き方をすることで呼び出し側で引数を明記することができる
* 定義側で引数の値にコロン「:」を付けて呼び出し側で値の前に引数名を書くとキーワード引数をもつメソッドを書くことができる
* 例
* `def introduce(name:,age:,height:)`
* `puts “こんにちは”`

元記事を表示

【Ajax】いいね機能を非同期通信で実装したいよ

# はじめに
ある投稿に対していいね機能を実装する際にAjaxを使って一部だけ情報更新を行いたい。
その際、とても苦労した部分について下記の記事にまとめたので、参照していただきたい。

https://qiita.com/vaza__ta/items/ef0cc701eabe863dfe91

下記テーブルは作成済み。
userテーブル
postテーブル
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |

# いいね機能にAjaxを実装
早速実装を開始する。
**完成図**
![完成図.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2684787/06042a76-75c1-eb67-bd45-f40990

元記事を表示

【Rails】missing required keys: [:id]の原因と対策

# はじめに
ある投稿(postテーブル)に対して、いいね(favoriteテーブル)を削除する(destroyアクション)を実行すると、掲題のエラーが発生した。これについて、原因と対策を記す。

下記テーブルは作成済み。
userテーブル
postテーブル
favoriteテーブル
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |
# 原因: favoritesテーブルの主キー:idが渡せていない
rails routesでルーティングを見てみると、favoritesテーブルに主キーを渡さなければいけない。
“`言語名:ターミナル
post_favorite DELETE /posts/:post_id/favorites/:id(.:format) favorites#destroy
`

元記事を表示

【rails】モーダルウィンドウ実装【初心者向け】

# 初めてモールドウィンドウを実装したい人向け
rails初心者向けにできるだけ簡単な記述でモールドウィンドウを実装します。
基本的な部分も解説します。
私も初心者なので半分備忘録です。

今回実装するのは削除時の確認用モールドウィンドウです。
必要な機能に合わせて適時変更してください。

# 環境
私の開発環境です。
– ruby 2.6.5p114
– Rails 6.0.5
– jquery導入(rails6でのjquery導入はリンク参照:https://qiita.com/tatsuhiko-nakayama/items/b2f0c77e794ca8c9bd74)

# HTML
“`erb:body.html.erb
削除
<%# モールドウィンドウを展開するリンクを設置します。href属性は設定不要です %>
<%# classはボタン用のCSSを当てるために設定しています。 %>

<%# 以下削除選択時モーダルウィンドウ(デフォルトは非表示) %>

Mysql2::Error: Specified key was too long; max key length is 767 bytes

オリアプを作っている際に見慣れないエラーが発生したので、どう解決したのかを書きます。

## エラー発生
サーバーを立ち上げてlocalhost:3000にアクセスしたところ、activerecord::pendingmigrationerrorというエラーが画面に表示されました。
ターミナルを確認してみると、以下のエラーが発生していました。
“`
Mysql2::Error: Specified key was too long; max key length is 767 bytes
“`
## 原因と解決策
エラー文によると、どうやらkeyの長さの制限である767byteを超えてしまったようです。
そもそもこれまでアプリを作成した際に発生したことがなかったのでなぜ?と思い過去のアプリを確認したところ、database.ymlにある`utf8mb4`を`utf8`に変更することを忘れていました。
今までは特にこの記述に変更する理由もよくわかっていませんでしたが、どうやら`utf8mb4 `だと1文字4バイトとなってしまい767バイトを超えてしまうみたいです。
“`databa

元記事を表示

Rubyで学ぶソートアルゴリズム

# はじめに

本記事は「Rubyで学ぶアルゴリズムとデータ構造」勉強会用の資料として書かれたものです。

ソートとは、データの集合を一定の規則に従って並べ替えるものです。
Rubyには [Array#sort](https://docs.ruby-lang.org/ja/latest/method/Array/i/sort.html) が存在し、これで配列の要素を楽々ソートできます。

“`rb
ary = [ “d”, “a”, “e”, “c”, “b” ]
ary.sort #=> [“a”, “b”, “c”, “d”, “e”]
“`

このように言語側でアルゴリズムを用意してくれているとはいえ、中身を知っておいて損はないです。基本的なソートアルゴリズムを押さえることで、より高度なアルゴリズムとデータ構造への理解がしやすくなります。

そこで本記事では下記ソートアルゴリズムをRubyで実装することで理解を深めていきます。

– 選択ソート
– バブルソート
– マージソート
– クイックソート

ソートとなると順序性担保や計算量の話題がどうしても出てきますが、本記事で

元記事を表示

Dockerで構築したRailsサービスのproductionモード起動方法

## なぜ記事を書こうと思ったか
サービス開発中に本番環境のテストをする状況が発生し、Railsのproductionモードを起動する必要があったのですが、少し苦戦してしまった為、備忘録として残します。

## 関連ファイル
– config/credentials.yml.enc
– config/master.key __※`rails new`を実行した事がない場合、作成されていません。今回作成する手順も記載します。__
– docker-compose.yml
– Dockerfile
– config/database.yml
– config/environments/production.rb

## 実行手順
__※元々のconfig/credentials.yml.encに対応するmaster.keyを所持している場合、2~5の手順は飛ばして下さい。__

1.ターミナルにて`docker-compose up -d`でサーバーを起動し、`docker-compose exec app bash`でコンテナに入る。

2.コンテナにて`EDITOR=vi rail

元記事を表示

railsコマンドを打つとエラーが起きた

**ある日railsコマンドを打つと、こんなエラー文が出てきた**
“`
`setupterm’: The terminfo database could not be found. (Reline::Terminfo::TerminfoError)
“`
どうやら terminfoがdatebaseにないよと言われてるが
いじった記憶がない、、、?
恐らく何かを導入した際に何かが変わってしまったのかもしれない

# 使用環境
– M1
– Ruby 3.1.0
– Rails 6
– PostgsreSQL

# 解決方法
以下のファイルをコメントアウトすると、とりあえず動く
エラー文の下にansi.rbあるのでcommand + クリック
“`
ansi.rb

# if Reline::Terminfo.enabled?
# Reline::Terminfo.setupterm(0, 2)
# end
“`
他にいい方法があれば教えていただきたいです

元記事を表示

初心者向け rails-i18nでエラーメッセージを日本語化(翻訳)できない 文字化け

## 実行環境

rails-i18nを利用してエラーメッセージを日本語化しようと試みたが上手くいかなかった。
以下の様に文字化けして表示されてしまう。

“`terminal
irb(main):002:0> Post.create!(title: “”, content: “”)
省略.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/activerecord-6.1.6/lib/active_record/validations.rb:80:in `raise_validation_error’:

****以下i18nによる翻訳結果****
\xE3\x83\x90\xE3\x83\xAA\xE3\x83\x87\xE3\x83\xBC\xE3\x82\xB7\xE3\x83\xA7\xE3\x83\xB3\xE3\x81\xAB\xE5\xA4\xB1\xE6\x95\x97\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x97\xE3\x81\x9F: Title\xE3\x82\x92\xE5\x85\x

元記事を表示

初めてのRailsチュートリアルに挑戦!第3章

# 学習内容
1. セットアップ
1. 静的なページの作成と調整
1. テスト実施
 *Red→Green→Refactorの実施
1. タイトルの追加とテスト

# 学習時のエラー対応
最後にGitHubにプッシュする際に、以下のエラーが表示。
“`
$ git push origin master
To https://github.com/(ユーザー名)/sample_app.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to ‘https://github.com/(ユーザー名)/sample_app.git’
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same re

元記事を表示

Golangでrubyライクな配列処理をしたい!

# TL;DR
golangでrubyライクに配列操作ができるライブラリを書いたので、興味があったら使ってみてね!
https://github.com/ppmasa8/rbarr

## なぜ作ったか
rubyを普段使っている僕が、golangを使ったときに配列操作のやりにくさにキレそうになったので、作ってしまいました。
結果的に作っていく段階でgolangの配列操作に慣れてしまったので、なんとも言えませんが。

## 実装したメソッド
https://github.com/ppmasa8/rbarr#index
“`
[]intの場合
pop
shift
push
unshift
delete
sum
max
min
size
uniq
include
first
last
combination
reverse
empty
sort

[]stringの場合
pop
shift
push
unshift
delete
size
uniq
include
first
last
combination
reverse
empty
sort

“`

## 使い方
https://

元記事を表示

文字列 シングルクオートの盲点 式展開の際に注意!

普段何気なく使っていたシングルクオーテーションと
ダブルクオーテーションの違いを調べたので、メモ書きしておきます。

ポートフォリオを作成している際に、
‘#{user.index}’
とした際に、式展開が出力がされなかったため、色々と調べてみると
“#{user.index}”
のようにダブルクオートを使わないと式展開は出力されないみたいです。

また同様に
改行もダブルクオーテーションでしか使えないみたいです。

元記事を表示

SVG::Graph(svg-graph gem)で散布図を描く

pure Ruby で手軽に使えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234055/32bd38e2-187c-8040-63e4-42a87cdc29b6.png)


https://rubygems.org/gems/svg-graph

OTHERカテゴリの最新記事