Ruby関連のことを調べてみた2021年11月25日

Ruby関連のことを調べてみた2021年11月25日
目次

Rails scaffoldを使ってRailsに入門する

## はじめに
Railsのscaffoldを使用してCRUDのアプリケーションを生成してみます。
また、生成されたコードを読み解いて処理の流れをざっくりと読み解いてみます。

なお、本編の内容はRailsチュートリアルの2章を参考にしています。随時、参考になった文献を記載しています。

[第2章 Toyアプリケーション – Railsチュートリアル](https://railstutorial.jp/chapters/toy_app?version=5.1#sec-demo_users_resource)

## Rails scaffoldとは

– Railsの機能の一つで、コマンド1つでCRUDの雛形を作成することが出来る
– scaffoldとは「足場」という意味を持ち、Railsアプリケーションの足場を作る機能と言える

[What is Scaffolding in Ruby on Rails? – RubyGuides](https://www.rubyguides.com/2020/03/rails-scaffolding/)

## 使ってみる
### scaffo

元記事を表示

【Rails】ルーティングのまとめ

##概要
railsのroutes.rbに記述するルーティングについてのまとめ。

##内容

####ルーティングとは
受け取ったurlを認識し、適切なコントローラ内アクションやアプリケーションに割り当てる機能。

####構文
“`
httpメソッド ‘urlパターン’, to: ‘コントローラ#アクション’
“`

#####ex) 以下のhttpリクエストを受け取った場合、以下のようになる。
“`
GET /patients/17
“`

routes.rb

“`
get ‘/patients/:id’, to: ‘patients#show’
“`

### HTTPメソッド

クライアントから送られたリクエストの種別を表すもの。

####get 
ページを表示する操作。

####post 
データを登録する操作。

####put 
データを変更する操作。

####delete 
データを削除する操作。

###rootの設定 
[http://localhost:3000 /](http://localhost:3000/%E3%80%8D) にアクセ

元記事を表示

【Ruby】早期リターンと倒置if

##早期リターン
式の値を戻り値としてメソッドの実行を終了します。式が省略された場合には nil を戻り値とします。

引用:https://docs.ruby-lang.org/ja/latest/doc/spec=2fcontrol.html#return

“`ruby
def greeting(flag)
‘good evening’
return ‘good night’ if flag
false
end

greeting(true)
# => “good evening”
greeting(false)
# => false
“`

##倒置if
条件文がfalseのときnilを返す

“`ruby
def greeting(flag)
‘good evening’
‘good night’ if flag
end

greeting(true)
# => “good evening”
greeting(false)
# => nil
“`

元記事を表示

投稿モデル単体テストコードの記述

前回に続いて、サンプルアプリの投稿機能、Eatモデルの単体テストコードを実装します!

#①.テストコードを記述するファイルを作成

まず、Eatモデル単体テストコードを記述するための、ファイルを生成します!

以下のコマンドを実行します!

“`php:ターミナル
% rails g rspec:model eat
“`

以下のように、テストコードを記述するためのファイルeat_spec.rbと、FactoryBotを記述するためのファイルeats.rbが生成されます!

“`php
spec
L factories
L eats.rb
L users.rb

models
L eat_spec.rb
L user_spec.rb
“`

#②.FactoryBotを準備

続いて、Eatモデルのインスタンスを生成するFactoryBotを設定します!

eats.rbに、以下のように記述します!

“`php:spec/factories/eats.rb
FactoryBot.define do
fac

元記事を表示

Ruby の Array.pack(‘p’) で ‘can’t modify frozen String’ が出たら、バージョンを上げるか、解凍が必要

Ruby で pack をしたら、 `can’t modify frozen String` が出たので、記録する。

“`rb
[47] pry(main)> str = ‘abc’
=> “abc”
[48] pry(main)> str.freeze
=> “abc”
[49] pry(main)> [str].pack(‘p*’)
RuntimeError: can’t modify frozen String
from (pry):48:in `pack’
“`

`pack` は変更(`modify`)ではない、エラーが出るのが不思議だった。
そこで思いついたのは、「ポインタを渡すと、破壊できるから」という理由。

本当にそうなのかを調べようと思ったが、 2.6.3 まではエラーだが、 2.7.3 からはエラーにならなくなっていることに気づいた。

下記のコードを `tmp.rb` として保存し、手元にある version を切り替えながらテストした。

“`rb
# tmp.rb
# frozen_string_literal: true

puts RUBY_VE

元記事を表示

【環境構築】rbenvで指定バージョンのRubyにダウングレード【mac】

Macでrbenvを使用して指定バージョンのrubyにダウングレードしようと思ったのでメモ:writing_hand_tone2:
ちなみにHomebrewでrbenvは既にインストール済み。

チュートリアルのバージョンと自分の開発環境のバージョンを一致させたくて今回のダウングレードを実施することにしました。

(~~キャッチアップの際、色々エラーが出てきて、本来の主目的以外のところで時間をとられるのが面倒だなと思ってたので、「もうチュートリアルと一緒のバージョンに下げちゃえ」と思ったので、やむをえずダウングレードすることに~~)最善策ではないと思うので、良い子はマネしないでね:runner_tone5:

# 実行環境
* Homebrew 3.3.2
* ruby 2.6.8 → 2.5.0 にダウングレード

# 現在のRubyバージョンを確認
“`
$ ruby -v
ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.x86_64-darwin21]
“`

# 指定バージョンをインストール
“`
$ rben

元記事を表示

Could not reach host index.rubygems.org. Check your network connection and try again. と言うエラーについて。

### Cloud9を使ってrailsチュートリアルを進めているのですが、`Could not reach host index.rubygems.org. Check your network connection and try again. `と言うエラーについて教えていただきたいです。

### 発生している問題・エラー

“`
$ bundle install
$ bundle update
“`
などを叩くと

“`
Could not reach host index.rubygems.org.
Check your network connection and try again.
“`

と表示されます。

自分で試したことといえば数分時間をおいてから新しくディレクトリを作り直すことしかできず、(お手上げ)しかし、それでなぜかエラーが表示されなくなり、問題なく先ほどのコードを叩くとinstall されてupdate出来てしまいました。

そこで、なぜ解決できたのか質問させてください。

hostに行けないとエラーが出た場合(Could not reac

元記事を表示

ruby on rails tutorial3章を始めたら出てきたThere was insufficient space〜 というエラーの解決方法

やっと3章に突入して意気揚々と進めていくと、

“`ruby:qiita.rb

There was an error while trying to write to
`/tmp/xxxxxxxxxxxxxxxxxxxx/versions`. There was
insufficient space remaining on the device.

“`

がこんにちは。

どうやら何かの容量がないということらしい。

そうこうしているうちに、awsのターミナルにコードを入力できなくなる。
![スクリーンショット 2021-11-23 10.30.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2144713/a365d842-4b6f-973f-26eb-5265ba55315b.png)
![スクリーンショット 2021-11-23 10.30.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214

元記事を表示

【オリジナルアプリ】公務員からの転職を考える人のための交流サイト【公務員NEXT】

はじめに

自己紹介

– 未経験からのエンジニア転職を目指す30代前半の地方公務員です。
– 3児のパパであり、家事・育児・仕事の合間を縫って、何とか20時間/週の学習時間を確保できているという状況です。(記事執筆時点で学習開始から40週を過ぎたので、総学習時間は約800時間です。)
– ポートフォリとして、オリジナルアプリが完成したので、これから転職活動を開始します。

この記事の目的

– 転職活動を開始するにあたって、オリジナルアプリの内容を人の目を意識した形で整理しておきたかったからです。
– オリジナルアプリの案に悩んでいる人に向けて、一つの事例として参考になってくれればと思っています。
– 似た境遇の人の励みになれば、幸いです。(私自身、似た境遇の人が頑張っているところを見るとすごく励みになりました。)

オリジナルアプリ「公務員NEXT」について

目次

[1.サービスの概要](#1サービスの概要)
[2.開発経緯](#2開発経緯)
[3.使用技術](#3使用技術)
[4.インフラ構成

元記事を表示

文字列の置き換え

#はじめに
文字列が入力されるので表に沿って文字列をを置き換える

| 置き換え前 | 置き換え後 |
|:———–:|:————:|
| A | 4 |
| E | 3 |
| G | 6 |
| I | 1 |
| O | 0 |
| S | 5 |
| Z | 2 |

“`ruby
string = gets.chomp
string.gsub!(“A”, “4”)
string.gsub!(“E”, “3”)
string.gsub!(“G”, “6”)
string.gsub!(“I”, “1”)
string.gsub!(“O”, “0”)
string.gsub!(“S”, “5”)
string.gsub!(“Z”, “2”)

puts string
“`
冗長

元記事を表示

Ruby シンボルを理解する

## ハッシュについて
ハッシュとは配列と似たようなもので、配列はindex(0から始まる投資番号)でvalue(値)を管理するのに対して、key(文字列のものとシンボルがある)によってvalue(値がある)。
以下にハッシュの例としてuserハッシュを用意する.

#### Ruby

“`ruby
user = { ‘name’ => ‘田中’,
‘email’ => ‘tanaka@example.com’}
“`

あれこれ連想配列じゃん、javascriptのオブジェクトじゃんと思った人も多いと思う。呼び名が違うだけで実際ほぼ同じである。しかし、keyの値が文字列になっているし、=> このような記号が使われている。(PHPなら使われていたような…)
####Javascript

“`javascript
user = { name: ‘田中’,
email: ‘tanaka@example.com’}
“`

#### keyの値を文字列以外で書くことも可能!! 
##シンボルを使う
こちらの方がbetterらしい
#### R

元記事を表示

【初心者向け】翻訳ファイル(YML)編集後から「InvalidLocaleData」のエラーになる

###■環境
・Windows10(64bit)
・Ruby 2.7.4
・Rails 5.2.6
###■翻訳ファイル編集後から「InvalidLocaleData」のエラーになる
####状況
Railsアプリケーションを国際化対応(i18n)するために、翻訳ファイルである「ja.yml」と「en.yml」を編集した。
しかし、その後から全ビューが以下のエラーで表示不可になった。

 I18n::InvalidLocaleData in 【コントローラ名】#【アクション名】
 Showing 【ビュー名】 where line #【行番号】 raised:
 can not load translations from 【アプリケーションの絶対パス】/config/locales/en.yml:
 #): did not find expected key while parsing a block mapping at line 【行番号】 column 【列番号】>

####原因
ダブルクォーテーション(”)で囲

元記事を表示

seedとfakerでランダムなユーザーデータを作成し、RailsでUser-APIを実装する。

## 手順
1\. APIモードで作成

2\. モデル・コントローラの作成

3\. ルーティングの設定

4\. コントローラの設定

5\. seedとFakerでランダムなサンプルデータを作成

6\. test.httpファイルを作成して、HTTP要求の種類別に要求をしてみる

## APIモードで作成
“`
console
$ rails new user-api –api
“`

## モデル・コントローラの作成
今回はtitleというstringを持ったpostというテーブルを作成します。

“`
$ rails g model post first_name:string last_name:string gender:integer

$ rails g controller users

$ rails db:create

$ rake db:migrate
“`

## ルーティングの設定
“`
config/routes.rb

Rails.application.routes.draw do
resources :users
end

元記事を表示

curlでアクセスできるのにrubyでアクセスできない、そんな状況でもデバッグがしたい!

# 全く同じパラメータなのにcurlだとアクセスできてrubyだとエラーが返ってくる??
とあるサービスのAPIを利用していたある日、
rubyで利用しているAPIからシステムエラーが返ってくるとの連絡が。
しかも、ログをとってcurlで叩いてみると正常にAPIは動作するとのこと。

さて、環境情報が悪いのかプログラムの仕業か、はたまた太陽風の影響なのか?
半日ほどあれやこれややってみて、原因がわかってみればああなんだそんなことか。というお話です。

#### rubyやcurlの問題ではなかったので、思考の過程をメモ書きとして残しておくものです。

## まずは本当なのか確認する

今回、問題が発生したのはテストサーバーなので、まずはテストサーバーにてリクエストのログを取りました。
コード自体はなんて事のない普通のNet::Httpな奴です。

(※コードはイメージです)

“`ruby
uri = URI.parse(“https://jsonplaceholder.typicode.com/todos”)
http = Net::HTTP.new(uri.host, uri.p

元記事を表示

【個人開発】バチェラーの優勝予想をする放置ゲームを開発しました

> 最初から優勝者を当てていたのに、その証拠がなく誰にも自慢できなかった。

これがバチェラー・ジャパン シーズン2(2018)を見終えたときから
自分の中に残っていたモヤモヤであり、本アプリ開発の背景です。

## サービス概要
[![Image from Gyazo](https://i.gyazo.com/06ced0101bbc63e1f402b3bd7a900bdf.jpg)](https://bachelor-derby4.herokuapp.com/)
文字通り「バチェラー・ジャパン シーズン4」の優勝予想をするシンプルなゲームです。
1分で遊べて人間観察力の自慢ができるサービスです。

https://bachelor-derby4.herokuapp.com/

## 使用技術
– Ruby
– Ruby on Rails(API)
– slim
– sorcery
– jwt
– meta-tags
– JavaScript
– axios
– bootstrap
– Vue.js
– Vuex
– V

元記事を表示

Dockerを使ってRails5の初期環境をサクッと構築する

## はじめに

そうだ、Rails環境、作ろう。
(BGM: 「My Favorite Things / The Sound of Music」)

## この記事の目標

– `docker compose up` したらホスト側からrailsのウェルカムページが表示できるコンテナイメージを作成するDokerfileおよびdocker-compose.ymlを作成する。
– DBは個人的な好みでpostgresqlにする(それほど特にこだわりはないけど)
– DBはホスト側のSQLツールから接続できるようにする。
– ホスト側の環境は極力汚さない。

## 作業環境

– Windows10 Pro(MacOSでも手順は変わらないと思います)
– Docker Desktop version 4.1.1
– Visual Studio Code 1.59.1
– 以下の機能拡張をインストールしておく。
– Remote Development
– Docker

## 作成手順

### docker-compose.ymlの構成

コンテナを2つ作ることとします。

元記事を表示

【ポートフォリオ解説】date-matchの全てがこれで分かる!

#初めに
この記事は、date-matchを詳細に解説した記事です。
この記事とGitHubのREADMEとの違いは次のとおりです。

“`
この記事:date-matchをより詳細に解説して、情報を網羅的に把握ができる。
README:date-matchの概要を把握ができる。
“`
date-matchの辞書的な位置付けとして、この記事を作成しました。
気になる項目だけでもご覧頂けたら、幸いです。
※随時、項目を追加予定です。

#アプリ概要
あなたの行きたい場所やイベントを提案・検索することで、デート相手を効率よく見つけることができるマッチングアプリです。
主に、次の3点ができます。

“`
1. 行きたい日時やプランなどを添えて、提案ができる
2. 住所やキーワードなどで検索、行きたい日時が近い順などで並び替えができる
3. ダイレクトメッセージを通じて、招待ができる
“`

これらが出来ることで、既存のマッチングアプリにはない、このアプリ特有のメリットが3点あります。

“`
1. 自分の行きたい場所に共感してくれている人、行きたい日時が合う人から、お相手を効率よく

元記事を表示

Railsで複雑なSQLを書いた時のお話(複数テーブル結合・相関サブクエリなど)

# 記事について
2021年4月からwebエンジニアとして働いています。まだエンジニア歴1年未満のペーペーです。
月に1~2回、学んだことをアウトプットするために記事を書いていこうと思います。記事内容は実務使う技術だったり、技術書や動画で学んだことだったり、適当に興味あることを書いていきます。

# 今回の背景
Railsを使った開発業務で複雑なSQL書く必要があったので、その時調べたことや気をつけたことをまとめてみます。ちなみに使っているDBはMYSQL。

# 目次
1. SQLのみで書いてみる
2. Railsっぽく書き換える
3. セキュリティ対策を考える
4. エラー対策を考える
5. その他SQL書くときに便利な書き方を考える
6. まとめ

## 1. SQLのみで書いてみる
最初からmodelクラスに書いてくとわけわからなくなるので、SequelProなどを使ってSQLを書いてそれを元にRailsを組み立てていくほうが圧倒的に効率がいいことを学んだ。
そして今回業務で書いたSQLはざっと以下の構成。

“`sql
SELECT `取得したい値`
FROM `相関サ

元記事を表示

Rubyにおける : の意味

#はじめに
Rubyでコードを書いていると、`:`や`::`がよく出てきますが、
いまいちはっきりと理解できていなかったためまとめてみます。

##シンボル

シンボルとは、任意の文字列に`1対1`に対応するオブジェクト
`:hoge`のように表す
下記のように、文字列が都度異なるIDになるのに対し、シンボルではすべて同じIDになる

“`ruby
[1] pry(main)> :hoge.object_id
=> 2307228
[2] pry(main)> :hoge.object_id
=> 2307228
[3] pry(main)> “hoge”.object_id
=> 300
[4] pry(main)> “hoge”.object_id
=> 320
“`

##ハッシュのキーにシンボルで使う場合
ハッシュのキーには一般的に文字列ではなく、シンボルを使用する
理由としては、文字列よりも高速で値を取り出すことができるため

“`ruby
[1] pry(main)> hash = { name: ‘太郎’, age: 20 }
=> {:name=>”太郎”, :

元記事を表示

<ゲストログイン機能>ゲストユーザーの検索にidを使用するのは避ける方が良い

# はじめに
この記事はプログラミング学習中に得た知見を備忘録としてまとめたものです。
知っている人にとっては当たり前であったり理解が足りていないと感じられる内容も含むかと思いますので、あらかじめご了承ください。

# この記事で分かること
– Railsにおいてテーブルの主キーにはAUTO INCREMENTが設定されています。
– そのため、値がuniqueになるように自動採番されます
– `$ rails db:reset`でテーブルの再構築をした際、開発環境はAUNO INCREMENTは自動的にリセットされますが、本番環境(Heroku)ではリセットされません
– そのため、ゲストユーザーなど初期データで投入するとしても、テーブルのidカラムに依存した処理はNGです。

# 環境
**ローカル環境**
– Ruby 6.1.4
– Rails 3.0.2
– mysql2 0.5.3

**本番環境**
– Heroku
– ClearDB MySQL

# 背景
####ポートフォリオの作成においてゲストログイン機能を実装
すでにHerokuにデプロイしているアプリ

元記事を表示

OTHERカテゴリの最新記事