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

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

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

## 今日はクラスとインスタンスを学んでみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/aebc7b0f-72df-b942-24af-ad4b602d2c8f.png)

## 今日の学び
### クラス
* プログラムの設計図をクラス、生成されるものをインスタンスという
* インスタンスを生成するステップ
* クラス(設計図)を用意する
* クラスからインスタンスを生成する
* インスタンスに情報を追加する
* クラスは「class クラス名」で定義できる
* クラス名は必ず大文字で始める
* 「end」を書く必要がある

### インスタンス変数
* クラスのインスタンスの変数をインスタンス変数という
* 例:Menuクラスにnameというインスタンス変数を設定する場合
* `class Menu`
* ` attr_accessor :name`
* `e

元記事を表示

管理者機能実装後におけるデプロイ時の注意点

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

今回は、以前に投稿しました記事、
”管理者ユーザー機能の実装[Ruby, Rails]”の後日談のようなものを、
備忘録として書いていきたいと思います!

”管理者ユーザー機能の実装[Ruby, Rails]”はこちらからどうぞ↓
https://qiita.com/fujitacoma/items/974d18fbebf8c73c411c

# はじめに
使用クラウドサービスはHerokuです。

# 起こったこと

それは、管理者ユーザー機能を実装及びデプロイ完了後に、
嬉々として本番環境で確認をしようとした際に起こりました、、

管理者用のアドレスとパスワードでログインできない、、、!!
冷や汗。

# 原因調査
なぜ?意味なく開発環境のdbも確認する。
ちゃんと管理者用のアドレスとパスワードは保存されている。(当然)

db/seed.rbに管理者ユーザー情報が記述されているか確認する。

次はデプロイのログを隅々まで確認する。
ちゃんと、
“`
git push heroku master
“`

“`

元記事を表示

railsでsorceryをbundleしたらoauth2をアップデートしてくださいと言われた

先日`rails`で`sorcery`を使おうと思い、`Gemfile`に追加して`bundle install`を実行したところ、「インストールされている`oauth2`のバージョンがもうサポートされていないのでアップデートしてください」と言われ少し詰まったのでまとめました。

## 環境
Rubyバージョン 3.1.2
Railsバージョン 6.1.6

## 詳細
`Gemfile`に`sorcery`をバージョンを指定せず追加

“`ruby:Gemfile
# 追加
gem ‘sorcery’
“`

`bundle install`を実行したところ以下のようなメッセージエラーが出ました。
“`shell:ターミナル
% bundle install
You have installed oauth2 version 1.4.10, which is EOL.
No further support is anticipated for the 1.4.x series.

OAuth2 version 2 is released.
There are BREA

元記事を表示

曜日を10秒で暗算しよう!

# 曜日を暗算でパっと計算したい
「来月の31日にスケジュール入れておいたから」
「水曜日ですね、わかりました(キリッ」

これがやりたい。
毎回式だけ作って忘れちゃうのでメモ。

# ツェラーの公式
曜日を求めたい日付を西暦$Y$年$m$月$d$日とすると、
曜日$h$(0 = 日曜日, …, 6 = 土曜日)は、以下の式で表せられる。[^1][^2]
$${\displaystyle h=\left(d+\left\lfloor {\frac {13(m+1)}{5}}\right\rfloor +K+\left\lfloor {\frac {K}{4}}\right\rfloor +\left\lfloor {\frac {J}{4}}\right\rfloor -2J -1\right){\\%7}}$$
ただし:
$$K={\displaystyle Y\\% 100,}\\\\
J={\displaystyle\left\lfloor {\frac {Y}{100}}\right\rfloor,}\\\\
m=1\mbox{ または }m=2\mbox{ のときは

元記事を表示

Nokogiriを使って絵文字unicodeとキーワードのJSONを作る

# はじめに
ふと、絵文字のunicodeと絵文字のキーワード(検索とか予測変換に使う単語)が組み合わさったJSONが欲しくなりました。
こんな感じのJSON
“`JSON
[
{
“hex”: “1F347”,
“annotations”: [
“ぶどう”,
“グレープ”,
“果物”
]
},
{
“hex”: “1F348”,
“annotations”: [
“メロン”,
“果物”,
“野菜”
]
},
{
“hex”: “1F349”,
“annotations”: [
“スイカ”,
“果物”,
“野菜”
]
}
]
“`

なのでNokogiriを使ってスクレイピングしてJSONを作りたいと思います。

# やること
スクレイピングする対象のサイトはUnicodeコンソーシアムの[CJK Annotations](https://unicode-org.github.io

元記事を表示

nervの模様のコードを作ったよ!

# TL;DR
quine作った!
ちなみにこのコードは動きます、試してみてね!
“`ruby
eval(
(%w(1.upto
(18)do|i|s=i
;if (i==1);s=”A DAM”elsi
f( i==2);s=”LILITH”elsif(i
==3);s=”SACHIEL”elsif(i==4);s=
“SHAMSHEL”elsif(i==5);s=”RAMIE
L”elsif(i==6);s=”GAGHIEL”els
if(i == 7);s=”ISRAFIL”elsif(i==8);
s=”SA N DAL PHON”elsif(i==9);
s =”MATA RAEL”elsif(i==10);s=”SA

元記事を表示

【Ruby on Rails】検索機能追加

# 開発環境
Rails 6.1.4.1
ruby 2.6.3

# 前提条件
– devise導入
– Bootstrap導入
– Userモデル、Bookモデル実装済み
– ユーザー一覧表示と投稿一覧は部分テンプレートで作成済み

# 目次
– コントローラー作成
– ルーティング
– モデル定義
– View作成

## ①コントローラー作成
まずは検索機能のコントローラーを作成します。
同時にコントローラーアクションも作成します。

“`ruby:ターミナル
$ rails g controller searches search
“`

searchesコントローラーのsearchアクションを定義します
“`ruby:searches.contoroller.rb
class SearchesController < ApplicationController before_action :authenticate_user! def search @range =params[:range] @word =params[:word]

元記事を表示

Selenium(Capybara)+Firefox+Rubyでconsole.logを取得する

## このページについて
Firefox + Selenium(Capybara) で console.log に出力される値を取得する方法について、苦戦したので備忘録です。

## 環境
* Ruby 2.6
* Capybara 3.32.1
* Firefox 2022/7/5 時点で最新のもの
* Geckodriver 2022/7/5 時点で最新のもの
## やりたいこと
console.log に出力される値を Selenium で取得し、ログに出力したい。

Chrome の場合は `driver.manage.logs.get` で簡単に取得できますが、Geckodriver ではこの方法は現時点では使えません。
以下 issue に代替案が書かれていますので、こちらを参考にします。
https://github.com/mozilla/geckodriver/issues/284

## コード
Capybara の設定に `devtools.console.stdout.content` を追加します。
“`ruby
Capybara.register_driv

元記事を表示

「完全に理解した」状態の僕が「チョットワカル…」になるまでのとある企業の新人研修 part.3

▼part1こちらから▼
https://qiita.com/kobayashimakoto/items/4fe942815c7fc941821f

▼part2こちらから▼
https://qiita.com/kobayashimakoto/items/ca131b8fbe8007a18f00

こんにちは
part2でご紹介した、~~社内でのボッチ生活を解決する~~ サービス **TeaTime** についてのお話です。

リリースして困ったことや、実際に運用してみてどうだったのかをご紹介します。

# そもそもTeaTimeって?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2508607/654ccc04-4980-aa6b-d197-c387034e71fd.png)
ざっくり言うと、アプリに登録さえしといたら、
登録者の間でいい感じにお茶会をセッティングしてくれて
そのお茶会に参加することで、**仲良くなれる機会を得る**というサービスです。

▼作った時の話はpart2を

元記事を表示

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バイトを超えてしまうみたいです。
“`database.yml
encoding: utf8  #utf8mb4からut

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事