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

Rails関連のことを調べてみた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.

元記事を表示

Docker + Rails + Remote-Containers【VSCode】

## Docker + Next.js + Remote-Containers

“`.devcontainer/devcontainer.json
{
“name”: “myapp-backend”,
“dockerComposeFile”: “../docker-compose.yml”,
“service”: “api”,
“workspaceFolder”: “/”,
“initializeCommand”: “ssh-add ~/.ssh/id_rsa”
}

“`
“`.devcontainer/Dockerfile
FROM ruby:3.1.2
ARG APP_NAME=myapp-backend
ARG USER_NAME=ruby
ENV RUBYGEMS_VERSION=3.3.10
ENV TZ=Asia/Tokyo

WORKDIR /${APP_NAME}

COPY Gemfile Gemfile.lock /${APP_NAME}
RUN gem update –system ${RUBYGEMS_VERSION} && \

元記事を表示

【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
`

元記事を表示

簡単ログイン・ゲストログイン機能の実装でのエラーを解決:【No route matches [GET] “/users/guest_sign_in”】

# 環境
– Mac(12.2.1)
– MacBook Pro (13-inch, 2020)
– 2 GHz クアッドコアIntel Core i5
– 16 GB 3733 MHz LPDDR4X
– ruby (2.7.5)
– rails (7.0.1)

# はじめに
https://qiita.com/take18k_tech/items/35f9b5883f5be4c6e104#%E3%81%9D%E3%81%AE2-%E3%82%B2%E3%82%B9%E3%83%88%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E6%A9%9F%E8%83%BD%E3%81%AE%E5%AE%9F%E8%A3%85%E6%96%B9%E6%B3%95

こちらの記事を参考にゲストログイン機能を実装した時に出たエラーを解決した

# 解決したい内容

ゲストログインをすると下記のエラーになる
Routing Error
No route matches [GET] “/users/guest_sign_in”

“`config/

元記事を表示

【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

元記事を表示

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

元記事を表示

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

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

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

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

元記事を表示

楔形文字の変換gemとアプリを作りました。

# TL;DR
アルファベットないしはひらがな・カタカナを楔形文字に変換するrubygemとアルファベットのみを楔形文字に変換する
アンドロイドアプリを作ったので、使ってみてね!
rubygems: https://rubygems.org/gems/kusabi
android : https://play.google.com/store/apps/details?id=com.chatram.cuneiform

## 例
https://github.com/ppmasa8/kusabi/#usage-example
“`ruby
# これはrubygems版
“Unknown”.to_cuneiform => ???????

“!Unk@no#wn”.to_cuneiform => !???@??#??

“アンノウン”.to_cuneiform => ?????

“アンノウン?”.to_cuneiform => ??????

“`

## 仕組み
タイトルからわかるようにかなり簡単な作りになっており、
https://github.com/ppmasa8/cun

元記事を表示

[Ruby on rails] case式を使わない方法を模索する

# はじめに

未経験からエンジニアに転職しまして
業務で学んだ事をアウトプットしていきます!
## case文を使わなくても良いかも知れない
例えば遊園地の入園料で年齢によって処理を切り分けたいとします。
切り分けすぎですが

0歳から5歳なら180(円)を出力
6歳から10歳なら300(円)を出力
11歳から15歳なら500(円)を出力
16歳から20歳なら1,000(円)を出力
21歳以上なら3,000(円)を出力

したいとします。

## case式で書く
今までの自分であればcase式を書いていました。
例えばこんな感じです。

“`text.rb
age = 20

case age
when 0..5
puts 180
when 6..10
puts 300
when 11..15
puts 500
when 16..20
puts 1_000
when 21..nil
puts 3_000
end
=>1000
“`
よくある書き方だと思います。

ですが、別のファイルに切り出して定数で管理しても良いかもしれません。
## 定数で管理してみる

元記事を表示

【Rails】uglifierはterserに置き換えた方がいいかもな話

とあるプロジェクトである日突然にそれは訪れました。

デプロイ時の`assets:precompile`でエラーが発生し、デプロイに失敗するようになったのです。

config系の設定値は変えてないし、特にバージョンアップなどしてないし、変更したことといえばいくつかライブラリを追加した(nodeのパッケージ)のとReactのファイルをいくつか追加したぐらい?

同じような現象でハマる人が減りますようにという期待を込めて、情報共有として残しておきます。

# TL;DR
* sprockets + gemのuglifierを使用してjsのcompileをしている場合は、compile用のgemをterserに変更して、assets.rbも変更したほうが良さそう
* uglifierが使えるのはES6まで
* railsもterser推奨っぽい

# 何が起こった?
冒頭で概略は説明しましたが、デプロイ時に実際に出たエラーは以下のような感じです(プロジェクト名・ブランチ名の部分は伏せてあります)

“`bash
# …(略)

rake stdout: Nothing w

元記事を表示

レスポンシブ対応で役立つ実装の仕方

レスポンシブ対応しようと思っていたけど、いざ実装しようと思ってたら何をすれば良いのか分からない人向けの記事となります。
いくつか追加で載せていきますが、とりあえず絶対に知っておいた方がよさそうなことを3選まとめておきます。

1、まずはなんと言っても開発者ツールで携帯の表示を確認すること。
MacBookでは、ショートカットキーでoption + command + Iを打つと開発者ツールが開きます。
![94155508-951D-4ADC-BD47-18BB2EA18CAA.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358181/fe891a5a-2a49-73e3-162e-f449bda55678.jpeg)

ここの赤いところを押すと携帯での表示画面に切り替わる。

2、viewportの設定

とhtmlファイルのheadの中に記述しておく。
そうす

元記事を表示

Ruby 練習問題1 ~ハッシュの基礎~

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

今回からシリーズとして、Rubyの練習問題を解いていきたいと思います。
徐々に難易度を上げていく予定ですので、お付き合い頂けますと幸いです!

それでは早速始めます!

# 問題
“`
puts hash.keys
puts hash.values
“`
上記のメソッドを実行した時に
“`
one
two
three
1
2
3
“`
とターミナルに表示されるような変数hashを作成するためのコードをシンボルを使って記述してください。

# 回答と解説
### 模範解答
“`
hash = { one: 1, two: 2, three: 3 }
“`
### 解説
シンボルを使ったキーの記述方法は、キーの後にコロン:をつけて定義します。
“`
hash = { キー: 値}
“`
ハッシュをシンボルで記述すると、コード上では文字列のように見えていますが、内部的には数値として処理されます。
数値として扱われるので、 __処理速度が速くなる__ ことと __文字列としての役割__ も果たします。
よって、ハ

元記事を表示

【プログラミング初心者】学習中意識していることについて

# はじめに
はじめまして。プログラミングスクールに通っている者です。
現在学習を開始し1か月が経ちましたので、自身の学習方法について振り返ってみようと思います。
こちらの記事をご覧になられた際、もし「こんな良い学習方法があるよ」などご意見があればぜひ教えていただきたいです。

# 学習中意識していること
学習中に意識していることは下記4つです。
個人的にはスクールに通い始め、②と④の重要さを特に実感しています。

### 全体学習での4つのポイント
**Point**
① **何**を学習するのか考える
② **スケジュール**を立てる(**いつまで**に**どこまで**を意識)
③ **実行**する(必要であれば**リスケ**)
④ **振り返る**

こう見ると、ほとんどPDCAサイクルと同じですね。笑

# Rails学習中に意識していること
学習の中でも現在、Railsを学習中に意識していることは下記5つです。
個人的にIT業界は①②③をサクッとこなし(曖昧にこなすわけではない)④にすぐ取り掛かれるかが重要なのかなと思いました。
(⑤は個人学習として必須項目ですが忘れがちなの

元記事を表示

Rails Ruby scssをページごとに実装したい時

ポートフォリオを実装していた際に、scssをtop header footerそれぞれに分けて、実装をしていきたいと思ったので、その実装方法を書かせて頂きます。
ネットで調べると色々な方法が書かれていて、どれで実装すれば良いのか、よく分からなかったため、今回僕なりの実装の方法でうまくいった方法を書かせて頂きます。

手順は主に4つです。
1、まずはscssで実装したいviewファイルに以下を記述します。

app/views/shared/_header.html.erb
“`
<%= stylesheet_link_tag 'header', :media => “all”%>
“`
※一番上に記述します。

2、次にapp/assets/stylesheets/内にscssファイルを作成します。
今回は1で [[stylesheet_link_tag ‘header’]]としているので
header.scssを作成します。

3、次にconfig/initializers/assets.rb内に読み込みたい、scssファイルを書きます。

“`
Rails.applic

元記事を表示

OTHERカテゴリの最新記事