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

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

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

## 今日はsuperを学んでみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/bb2592d8-55aa-4c17-319d-e4530e938514.png)

## 今日の学び

### super
* `super`を使うことでオーバーライドした親クラスにある同名のメソッドを呼び出せる
* 親クラスのメソッドの定義に合わせてsuperに対して引数を渡す必要がある
* 例
* ` def initialize(name:,price:,calorie:)`
* `super(name:,price:,calorie:)`
* `self.name=name`
* `self.price=price`
* `self.calorie=calorie`
* `end`

元記事を表示

Rails controller内に登場したbegin rescueとはなんぞや

#### はじめに
実務でバグ改修をしているときにcontroller内に次のような処理を見つけました。
~~~ ruby
def create
begin
# (通常のcreateの処理)
rescue エラーの種類 => e
# (eを使って色々書いてある)
end
end
~~~
beginというものが突如現れました。これはなんぞや?ifたいなものなのか・・・?
これまでRubyの中でbeginなんて記述をしたことがなかったので衝撃を受けました。
このままではバグ改修もできないので、「僕が出会ったこのbeginというものを僕はどれくらい知ってるんだろ〜」と思い、調べてみることにしました。
そうするとbeginを使用する際は基本的にrescueもセットであることもわかりましたので備忘録として残したいと思います。
もしもおかしな点や補足等ありましたら教えていただけると幸いです。

#### 環境(自分のPC)
Ruby 2.6.5
Rails 6.0.5

#### 前提
まず、singerモデル及びsingersコントローラーを作成し、singer.html

元記事を表示

【Rails6】deviseのログイン時にエラーが出て認証されないときの対処

## はじめに
`devise`というgemを使用してユーザログインしようとしたときに `Completed 401 Unauthorized` というエラーが吐き出されたので、備忘録として解決策を残しておきます。

今回deviseのモデルとして`user`モデルを作成していますが、適宜ご自身が作成したモデル名で読み替えてください。

また、初めての記事投稿なので拙い文章になることが予想されますが、悪しからずご了承ください。アドバイス等いただけますと幸いです。

## 開発環境
`Cloud9` `Ubuntu 18.04`
`Rails 6.0.4`
`Ruby 2.6.3`
`MySQL 5.7.38`

## 前提
モデル(`app/models/user.rb`)は以下のコマンドで作成済み。
“`bash:ターミナル
rails g devise user
“`

コントローラ(`app/controllers/users/*`)は以下のコマンドで作成済み。
“`bash:ターミナル
rails g devise:controllers users
“`

元記事を表示

ターミナルのインタープリターを使って文字列+連番を出したい!

# はじめに
仕事してて
“`
hoge430,hoge431,hoge432,hoge433,hoge434,hoge435,hoge436,hoge437,hoge438,
“`
みたいな文字列+連番みたいなのをぴゃぴゃっと出したいなーって思ったんですよ。使う用事があったんで。
で、こういうのってターミナルの各言語のインタープリターを使うとやれるんですけど、どうやったっけなー、と思いまして。
備忘録的な感じで。

# Ruby

まずはRubyです。Rubyがこういうの一番簡単に行けたイメージあったので。

“`bash
$ ruby -e ‘(430..438).each do |i| print “hoge#{i.to_s},” end’
“`

簡潔でいいですね。

ちなみにfor文使うとこうです。結局コレでも内部的には`each`が動いているんだそうです。

“`bash
$ ruby -e ‘for i in 430..438 do print “hoge#{i.to_s},” end’
“`

@scivola さんからコメントで頂いたのですがこんな書き方も

元記事を表示

RubyからRustに移行について

# RubyのエンジニアはRustの最初に困ったこと
– 気持ち: 他の言語とくらべると、考えりが違います。
– いくつか新しい言葉がありますので、困ります。 (mut, ownership, trait, )
– 最初に簡単な関数を書きましたが、ビルドでエラーは良く発生しました。

# 現在
– ユニークビジョン株式会社ではRubyをRustに変えています。
– 心理的にRubyをRustに簡単に変えるように説明します。

# Class/def VS Struct / impl
## Rubyでは
– Class / def
– データを持つ
– 処理を定義する

“`ruby
class User
def initialize(id, name, addr)
@id = id
@name = name
@addr = addr
end

def hello
puts “hello #{@name}”
end

end

user1 = User.new(1, ‘hoge’, ‘

元記事を表示

「LSEP」という不可視文字の削除方法

[バヅクリ](https://buzzkuri.com)CTOの合原です。
今回、非エンジニアからの依頼で、「LSEP」という記号?文字?の除去作業をシュッと行ったので、まとめたいと思います。

## 前提
当社[バヅクリ](https://buzzkuri.com)では、下記のように、オンラインで、
チームビルディングや研修を目的としてオリジナルのプログラムを提供しています。

とても、とても簡単に説明すると、、、

契約企業から特定のプログラムでのイベント開催の希望が発生すると、
アプリケーション上では、プログラムデータからイベントデータを自動生成しています。

プログラム、イベントそれぞれのデータについてCRUD処理が存在します。

![スクリーンショット 2022-07-20 17.04.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64537/b616cc8f-9030-d4a2-6b4c-1f822830e232.png)

通常企画チームにて、プログラムの入稿や更新、運営担当によるイ

元記事を表示

ElasticBeanstalkのRuby環境で軽微な修正を反映させるためにPuma再起動する方法

## 概要

マネージドサービスの場合、通常のデプロイ手順だとEC2自体が別のものに切り替わったりして反映までに時間がかかるため、そこまでの手順を踏まずに軽微な修正を反映したい場合の手順を記載します。

### ElasticBeanstalk環境

Ruby 3.0 AL2 バージョン 3.4.8

## ソースコード修正

ElasticBeanstalk(Ruby環境)で稼働しているEC2にsshキーペアでsshログインし、修正対象のファイルを修正しておきます。

“`sh
sudo su – webapp
cd /var/app/current
# rubyファイルを修正

# もしRailsアプリケーションでassetsを変更した場合は以下が必要(環境変数読み込みとassets:precompile)
export $(/opt/elasticbeanstalk/bin/get-config –output YAML environment | sed -r ‘s/: /=/’ | xargs)
bin/rails assets:precompile
“`

## Pu

元記事を表示

Formオブジェクトで保存したデータを表示させるには

formオブジェクトで複数テーブルに保存したデータをページ上に表示させるのに苦労したので、忘備録として記録する。

## formオブジェクトのデータを取得したい
itemテーブルとmaterialテーブルがあったとする。
二つのテーブルを組み合わせて、`Item_material`クラスを定義した。

詳細ページにて、materialテーブルに保存したデータを表示するためにitemコントローラーに下記を記述した。
“`ruby
def show
@item = Item.find(params[:id])
@material = Material.find(params[:id])
end
“`
これではダメたった。material.idが@itemと同じidを取得してしまう。
例えばitem.idが4ならmaterial.idも同じ4になる。

## 成功したコード
“`ruby
def show
@item = Item.find(params[:id])
@material = @item.material
end
“`
これでいけた。この記述なら@it

元記事を表示

Enumerable#grep などでも when 節のように複数のパターンを指定したい

case 式で `when 10..20, -20..-10` とはできるのに、 `Enumerable#grep` で `ary.grep(10..20, -20..-10)` とはできない。これをどうにかしてみたいお話(小ネタ)。

Ruby バージョン: 3.1.2

## 背景
Ruby では case 式の条件分岐に使われる `===` という演算子がある。通常は `==` と同じだが、いくつかのクラスでは**条件分岐が便利になるよう再定義**されている。

“`ruby
def judge(obj)
case obj
when true, false
puts “%p is a boolean object.” % obj
when 10..20, -20..-10
puts “abs(%p) is between 10 and 20.” % obj
when /e/
puts “%p contains a character ‘e’.” % obj
when Exception
puts “%p is an instance of Except

元記事を表示

初心者向け enum の導入

既存のusersテーブルにenumを導入しようとしたら色々課題があったので記事にしました。
ユーザーの性別や年齢層をセレクトボックスで入力できる仕様にしたい。

– `devise`によりログイン機能が実装されている
– 以下のusersテーブル

| カラム名 | データ型 | 備考 |
|:-:|:-:|:-:|
| email | string | deviseにより導入済み |
| password | string | deviseにより導入済み |
| nickname | string | deviseに追加した |
| gender | integer | deviseに追加した |
| age | integer | deviseに追加した |

# enum の設定
Userモデルにenumの定義をしていく。
“`rb:models/user
class User < ApplicationRecord devise :database_authenticatable, :registerable, :rememberable, :v

元記事を表示

==は「同値性」を、.equal?は「同一性」を判定しているらしい(Ruby)

## はじめに

今回はRubyにおける比較演算子`==` と`.equal`の違いについて簡単にまとめてみました。

タイトルを読んでもピンと来ない方には、ある程度意味のある記事になっていると思うので読んでもらえると嬉しいです。

## 対象読者

– `==`と`.equal?`の違いを理解せずに使っている人
– 「同一性」「同値性」と言われてもピンと来ない人
## 結論

いきなりですが結論です。

`==`と`.equal?`の違いは「**同値性を判定している**」か、「**同一性を判定している**」かです。

…タイトルのままですね。

あまりにも説明になっていないので、以下から詳しく解説していきます。

そもそも「同一性」「同値性」とは

– 同一性:参照値が同じオブジェクトを指していること(*1)
– 同値性:オブジェクトが同じ値を持っていること(*1)

(*1 『[独習Ruby](https://www.amazon.co.jp/dp/479816884X)』から引用)

を意味しています。

具体例を使って説明します。

“`ruby
array1 = [‘a

元記事を表示

rails new で発生したエラーについて

### __bundlerによる不具合__
今回、railsの環境構築の際にハマりかけたエラーについて備忘録としてまとめておきたいと思います。

### __概要__
railsのインストール等が完了し、新規プロジェクト作成の際にrails newを行ったところエラーが発生。

主なエラー表記は下記の通りとなります。
“`
(defined?(@source) && @source) || Gem::Source::Installed.new
“`

調べてみると、bundleそのものの不具合のようでこの時に使用していたバージョンはBundler version 2.3.7でした。

なので、以下の手順でbundlerのバージョンアップを行い、再度新規プロジェクト作成したところ問題なく完了しました。

“`
#現在のbundleのバージョンを確認
$ bundle –version
Bundler version 2.3.7

#最新バージョンへアップグレード
$ gem install bundler
Fetching bundler-2.3.18.gem
Successf

元記事を表示

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

## 今日はオーバーライドを学んでみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/a2131416-9a1a-43d0-4d72-a88a929766ab.png)

## 今日の学び
### オーバーライド
* 親クラスにあるメソッドと同じ名前のメソッドを子クラスで定義するとメソッドを上書きすることができる
* 例
* `class Food < Menu` * : * ` def info→親クラスと同じメソッドを上書き` * : * ` end` * `end` * 子クラスのインスタンスでは子クラスで定義したメソッドを優先して呼び出すため、親クラスに同名のメソッドがある場合は上書きされた子クラスのメソッドが優先的に呼び出される ### initializeメソッドのオーバーライド * initializeメソッドも子クラスでオーバーライドできる

元記事を表示

【Ruby on Rails】enumの導入・日本語表記の方法

# 開発環境
Rails 6.1.4
ruby 2.6.3

# 目次
– gemを導入
– enumを定義する
– enumの日本語化
– enumの紐づけ
– 確認

## gemを導入
まずはgemを導入します。

“`ruby:Gemfile
gem “enum_help”
“`
記述後、enum_help をインストールするために `bundle install`を行いましょう。

“`ruby:ターミナル
$ bundle install
“`

## enumを定義する

gem導入後、実際にenumを定義し、数値と文字列を紐付けします。
今回は数値と文字列を紐づける流れを、支払い方法のクレジットカード・銀行振込を例に解説します。

モデルは`Orderモデル`で定義します。

“`ruby:Order.rb
enum payment_method: { credit_card: 0, transfer: 1 }
“`

## enumの日本語化

先ほど定義したenumを日本語化します。

“`ruby:config/application.

元記事を表示

SlackでグループメンションのIDを取得したい。Webhookで必要だから。

Webhookでグループメンションの記法に関する記事はネットでいくらでも出てくるが、肝心のグループIDの取得の仕方がわからない。

ちなみに無料版ではグループ機能はないらしい。

なんか裏技的なやり方だけど、Slackをブラウザで開いて、開発者ツールで見ればできた。
ワークスペースの管理者権限とかも要らない。

– アクセス→https://slack.com/intl/ja-jp/
– 該当のワークスペースの「SLACKを起動する」
– Slack.appを起動しますか?→「キャンセル」
– (フランス語で失礼!)`Cliquez sur « Ouvrir Slack » pour lancer l’application pour ordinateur.
Cela ne fonctionne pas ? Vous pouvez également utiliser Slack dans votre navigateur web.`をクリック。日本語だと`「ブラウザで開く」`とかになるのかな?
– どっかでIDを取得したいグループメンションを表示。
– 開発者ツールを開いて、グループ

元記事を表示

脱jQueryによるcocoonの使い方

## 概要
1対多のテーブル構造において、小テーブルのフォームを複数作成するためのGem。
また、公式には、「このgemはjQueryに依存しているので、すでにjQueryを使用しているRailsプロジェクトで最も有効」とあるが、脱jQueryを実施しているプロジェクトでは[Vanilla JS版](https://github.com/oddcamp/cocoon-vanilla-js)もある。
今回は脱jQueryで実装する。
導入が違うだけで実装方法はごく普通のcocoon。

## テーブル設計
投稿(post)が1に対してジャンル(genre)が多

## 導入手順
まずはGemfileに追加。
“`
gem ‘cocoon’
“`

CDNにて導入。
私はimportmap採用でnode.js/yarnを極力排除したので、CDNにて導入。
(他に何かいい方法があれば教えてください)
“`

“`

ちな

元記事を表示

配列内の数字の合計(同じ数字を除く)再考察

# はじめに
前回、配列内の数字の合計(同じ数字を除く)の記事を書いたところ、コメントをいただきました。

[配列内の数字の合計(同じ数字を除く)](https://qiita.com/pipiyoyoyo/items/7d3229d051302ee64d8b)

ありがとうございます!
今回はそのコメントを元に気づいた点をまとめていきたいと思います。

# 環境
ruby 2.6.5

# 学んだこと
私の記述した模範解答だと、線形探索で配列内の数字が多くなればなるほど負荷が大きくなるそうです。
そこで、Hashを用いる方法を教えていただきました。

## 使用するメソッド
### tallyメソッド
[instance method Enumerable#tally](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/tally.html)
“` ruby
[“a”, “b”, “c”, “b”].tally #=> {“a”=>1, “b”=>2, “c”=>1}
“`
自身に含まれる要素を数え上げた結果をHa

元記事を表示

enumの使用方法/使用例

## 環境

・Ruby 2.6.4

・Rails 5.2.3

# enum(enumeration: 列挙)とは

・数値のカラムの対してプログラム上で別名を与える役割。

・名前を整数の定数に割り当てるのに使われるデータ型

・名前に数値を割り当てることで、コードの可読性を上げて、かつ不要な不具合を防いでくれるもの

・ActiveRecord::EnumはRails 4.1で導入された。enumの属性値はデータベース内の整数に対応付けられるが、クエリでは名前で参照できる。

・• enum型の定数は定義されている以外の値を受け付けない(例外が発生)

# 使用方法

1.usersテーブルにenum用のカラム(roleカラム,データ型はinteger型)を追加

2.userモデルにenumの定義をする

## 1.usersテーブルにenum用のカラム(roleカラム,データ型はinteger型)を追加

“`ruby
rails g migration AddRoleToUsers
“`

“`ruby
class AddRoleToUsers < ActiveRe

元記事を表示

pとputsの違い 〜pの罠〜

# pとputsの違い
**pの罠**
`p “50”`と`puts “50”`はなにが違うでしょう。

正解は、出力が
> `p “50”`
> => “50”
`puts “50”`
=> 50

になることです。

AtCoderなど回答を問題文通りにしないといけない場合`p “50”`だと一致しないことになります。(出力を`50`で求められている場合)
しっかり出力結果を確認して、回答するのが良さそうですね。

では。

元記事を表示

HTMLの基礎知識(詳細ページに星機能実装)

皆さんこんにちわ!!

今日もプログラミングしていますか?:point_up:

今回は詳細ページに星機能をつけていく機能を紹介します!!

注意:大前提としていいね機能を実装していないと実装できません!!:sunny:

![スクリーンショット (55).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738887/e03d307f-eacf-d115-c661-df4361748feb.png)

Step1:星機能(詳細ページ用)の中間テーブルとアソシエーションを組む!!!

“`ruby:.ターミナル
rails g model Review eve:integer user:references tweet:references

rails db:migrate
“`

Step2:userとtweetのモデルにアソシエーションの情報を打ち込む!!!

“`ruby:app/models/user.rb
has_many :review

元記事を表示

OTHERカテゴリの最新記事