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

Ruby関連のことを調べてみた2020年07月09日
目次

Mysql2::Error::ConnectionErrorを解決します

## 環境/バージョン
ローカルでやってます
Ruby v2.5.1
Rails v5.2.4
MySQL v8.0.19

## 何が起こった?

railsプロジェクトを作成したあと、`rails s’してみたらこんなエラーに遭遇

“`shell
Mysql2::Error::ConnectionError (Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)):
“`

## どうやって解決した?

エラー文からみてわかる通り「あ、MySQL」かとすぐわかります。

`ConnectionError`とあるので「繋がっていませんね〜」ってすぐわかります。

`database.yml`を調べて見る。

“`yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:

元記事を表示

基礎から学ぶ 人工知能の教科書 第2章 章末問題

# はじめに
機械学習の勉強として、「*[基礎から学ぶ 人工知能の教科書](https://www.ohmsha.co.jp/book/9784274224263/)*」 を読んでいます。

この本の特徴は、章末問題に`Python`の簡単なプログラムが載っていてるところです。
# 第2章 章末問題
“`ELIZA.rb
LIMIT = 20
CYCLE = 5

count = 0
endcount = 0
puts(‘Dr>私はDoctor、お話を伺います’)
while endcount < LIMIT print('あなた>‘)
inputline = gets.chomp.encode(“UTF-8”, “CP932”, :invalid => :replace)
if count >= CYCLE
puts ‘Dr>’ << inputline << '、ですか...' count = 0 elsif inputline.include?('先生') puts 'Dr>私のことでなくあなたのことを話しましょう’
elsif in

元記事を表示

def initializeでちょっとだけハマった話

### initializeはnewした時点で値がsetされる

クラスメソッドでinitializeにsetした値を参照したい時ハマってしまった

“`ruby
class Hoge
attr_accessor :aa
def initialize
@aa = ‘aa’
end
def self.bb
@aa
end
end

p Hoge.bb
# => nil

“`

Hoge.newしていないので値をセットできていません、
よってnilが返る

“`ruby
class Hoge
attr_accessor :aa
def initialize
@aa = ‘aa’
end
def bb
@aa
end
end

hoge = Hoge.new
p hoge.bb

“`

インスタンスメソッドを利用すれば値を参照できる(当たり前ですよね)
クラスメソッドで値を使いたい時は
initialize使わず直接インスタンス変数に値をセットしましょう。

“`ruby
class Hoge
@aa

元記事を表示

Rubyのハッシュとシンボルについて

# プログラミングの勉強日記
2020年7月9日 Progate Lv.162
RubyⅠ RubyⅡ
今日からRubyの勉強を始める。1ヶ月後にでRuby on Railsを用いてアプリを作れるように勉強していく。

#Rubyとは
 Qiitaでは初めてRubyについて触れるので、最初に簡単にRubyの説明と簡単な使い方について説明する。
 RubyはWebアプリケーションのシステムを作るためのプログラミング言語で、似たような言語ではPHPやPythonなどがある。
 本題のハッシュに入る前に簡単にRubyの使い方について説明する。

##変数の定義
 `変数名=値`で変数の定義を行うことができる。基本的な使い方は他のプログラミング言語と同じ。変素名は何の値が代入されているかわかりやすい名前にする。2語以上の組み合わせる変数名にはアンダーバー`_`を用いる。

##変数展開
 文字列の中で`#{変数名}`とすることで変数を代入している値に置き換えて文字列を含めることを変数展開という。変数展開を行う場合

gemでインストールしたrailsコマンドがなぜ使えるのか??

はじめに

※windowsのローカル環境下です。※

表題の通り、気になったので調べました。

bin/railsで実行するかrailsで実行するか??

まずは事前知識として、bin/railsで実行するかrailsで実行するか??

結論、どちらを使っても基本問題ないですが、参照元が違います。

binをつけるとプロジェクトディレクトリを参照。

binを付けないとローカル(グローバル)のrailsを参照。

続いて本題。

gemでインストールしたrailsコマンドがなぜ使えるのか??

railsコマンドはローカル環境変数でPath通してるはず。。。

→これはとても浅い勘違い!!

railsは以下のようにgemでインストールして

Railsから入った自分は【attr_accessor】が何か全くわからなかった

Rubyの基礎文法などを見ているとちょくちょく登場する**attr_accessor**というメソッド。

Ruby on Railsから入った自分は、最初見たときには全く使用用途が分かりませんでした。

そこからいろいろ調べてみるも

– **セッターとゲッターの両方を担うメソッド**
– **インスタンス変数の値を参照、変更する**

などなど正直理解不能です…

わかっている方には当た有前すぎて何言ってんだこいつ状態かもしれませんが、もし自分と同じところでつまずいた方がいらっしゃれば参考にしていただけると幸いです。

## attr_accessorの使用用途

まずは問題の**attr_accessor**メソッドですが一言でいうと**インスタンスに外部から参照、更新可能な属性を持たせるメソッド**です。

一つ一つ解説していきます。

## インスタンスの値には直接アクセスできない

Railsを使っていると忘れがちなのですが、大前提として**インスタンスの値には直接アクセスすることはできません。**

例として以下に**Hoge**クラスを用意しました。インスタンス変

☆初投稿:TECH CAMP学習、個人アプリ作成①、駆け出しエンジニア

# TECH CAMPに通い出して
初めて投稿させていただきました。
TECH CAMPの夜間コースに通い出して3ヶ月が経ちました。
カリキュラムではわからないことも沢山あり、その都度Googleで調べたり、メンターさんに質問したりと、苦労も沢山ありました。エラーを繰り返しながらも、無事に動いたときというのは何とも言えない喜びもありました。

諸々、何とかこなし、いよいよ個人アプリ開発となりました。

正直、現在も試行錯誤の連続でありますが、やはり自分のやっていることというのは、時間がたつと忘れてしまうこともありますので、自分が苦労して解決したことなどは記録していった方がよいと考え、投稿させていただきました。

まだまだ不慣れであり、かつ知識も未熟なため、書いてあることが間違っていることもあるかもしれませんが、はっきりいって投稿することに意味があるのだと思いましたので、間違っているところははっきり指摘していただけたら嬉しいです。

個人アプリの作成時、viewを表示させようとしたのですが
まずは以下のエラーがありました。

![image.png](https://qiita-ima

Railsでdeviseを追加したいのにbundle installができない

dockerで環境構築を行いgemの追加をした際にエラーが発生しましたので
備忘録として情報共有しようと思います!
#開発環境
docker
rails (5.2.0)
ruby (2.7.1)
mysql (5.7)
nginx
puma

※docker-compose buildでgemの更新をしますが時間がかかるので下記の記事を参考に
gemの更新を素早くする設定をしています。
 https://qiita.com/neko-neko/items/abe912eba9c113fd527e

#エラー内容
Gemfileでdeviseのgemを追加し、**docker-compose run –rm rails bundle install**をしたところ以下のエラーが発生

“`
~ RailsApp % docker-compose run –rm rails bundle install
Starting railsapp_db_1 … done
Fetching gem metadata from https://rubygems.o

【Ruby】Ubuntu での Ruby 開発環境構築

# はじめに
2020/7/7 時点で Ruby の環境構築をしてみたので、書き起こします。けっこうたくさんの方が記事にしていらっしゃいますが、自分でアウトプットするとそれだけでも勉強になるので。

# 導入環境
– Ubuntu 20.04 LTS (64bit)
– Windows 10 Virtual Box内にインストールしています。

(注意)同じような Ruby バージョン管理ツールに、「RVM」がありますが、rbenv と RVM は非互換なので、「RVM」が入っていない環境を準備します。

# 入れるもの
複数のRubyバージョンの管理ができる rbenv というツールも一緒に入れます。複数のRubyバージョンを入れられるだけでなく、プロジェクト毎に使用するRubyのバージョンを指定することができるようになります。
 また、rbenv のオプション扱い(?)ですが、ruby-build も導入します。

– rbenv 1.1.2-30-gc879cb0
– ruby-build
– Ruby 2.7.1p83 (2020-03-31 re

Railsでhtml.erbのclassを条件付きで追加する方法

#概容

下記のクラスに「ある条件」の時だけクラスを追加したいとする。

“`ruby

“`

例えば今回は`users_controller`の時だけクラスを追加するとする。
その場合の条件式は下記のようになる。

“`ruby

初心者が書く!macOS catalina に postgreSQL をインストールしてrails6.0.3.2で使えるようにするまで

プログラミングとmacの初心者です。
わからないなりに、色々調べて非常に時間を要したので
自分の覚書として念の為に書いておこうと思った次第ですが、
もし間違った記載など有りましたら玄人の方にご指摘いただけると本当に助かりますm(-_-)m
玄人以外の方も、出来ないなどご相談があれば、可能な限り対応します。※可能な限りですよ^^;
宜しくおねがいします。


## まずはhomebrewでpostgresqlをインストールして初期設定
ターミナルで以下を実行。場所はどこでも良いみたいです。
私は前に作ったprojectsフォルダで実行しました。
この後の作業は特に記載がなければ全てターミナルで行っています。

“`
brew install postgresql
“`
そして以下が初期設定らしいです。

“`
initdb /usr/local/var/postgres -E utf8
“`

## 起動して設定確認
まずは起動。

“`
brew services start postgresql
“`
以下でEncodingがUTF8になってればOKだそうです。ひょ

Kinx ライブラリ – パーサ・コンビネータ(その2)

# Kinx ライブラリ – パーサ・コンビネータ(その2)

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。今回もパーサ・コンビネータです。

* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* 個別記事へのリンクは全てここに集約してあります。
* リポジトリ … [https://github.com/Kray-G/kinx](https://github.com/Kray-G/kinx)
* Pull Request 等お待ちしております。

前回 [Kinx ライブラリ – パーサ・コンビネータ(その1)](https://qiita.com/Kray-G/items/0224128078af7554fd08) で A

Rubyで配列の中の文字列を数値に変更する方法

“`ruby
array = [“1”, “2”, “3”, “4”, “5”]
“`

のように配列の中に文字列で数字の値がある時に、配列の文字列を数値に変更する方法を書きます。

#for文の方法

“`ruby
array = [“1”, “2”, “3”, “4”, “5”]

intArray = []
for n in array
intArray.push(n.to_i)
end

# intArray => [1, 2, 3, 4, 5]
“`

`array`とは別の配列`intArray = []`を作成します。
`array`の値を`n`で取得して、`to_i`で文字列を数値に変更、`push`で`intArray`に値を代入していくという処理を繰り返します。

#mapメソッドの方法

“`ruby
array = [“1”, “2”, “3”, “4”, “5”]

intArray = array.map{ |n| n.to_i }

# intArray => [1, 2, 3, 4, 5]
“`

または

“`ruby
array =

form_with を使った検索フォームに初期値 value を設定する方法

筆者はRails6.0ですが、Rails5(Rails4も?)でも動くはずです。またSearchkick(Elasticsearchを簡単にするGem)を使っているので、もしかすると環境依存があるかもしれません。

最新のRailsでは`form_with`を使った記法が推奨されています。しかしこと検索フォームの作成においては、未だに情報が少なく苦戦したのでメモ。

## 正解のコード

“`erb
# index.html.erb

<%= form_with model: @post, method: "get", local: true do %>
<%= text_field_tag :search, params[:search], class: "form-control ds-input", placeholder: "検索‥" %>
<% end %>
“`

初期値valueを入れる場合は`text_field`は使えないようです。form_withを使っているのでURLの指定は不要ですが`method: “get”, local: true`の記述は

Rails5でECサイトを作る⑤ ~Customerモデル編~

# はじめに
架空のベーカリーで買い物できるECサイトを作るシリーズ、[Rails5でECサイトを作る④](https://qiita.com/GreenFingers_tk/items/58e04fbaf754fe33e294)の続きです。
ようやく機能の実装に入ります。まずは顧客サイトの親モデル周辺機能から順番に……ということで、今回はCustomerモデルのCRUDを中心に作ります。

# ソースコード
[https://github.com/Sn16799/bakeryFUMIZUKI](https://github.com/Sn16799/bakeryFUMIZUKI)

# deviseのコントローラ
deviseで新規登録できず、何でだろうと思ったらコントローラ側にパラメータの許可を与えていなかったためと判明しました。

“`ruby:app/controllers/customers/registrations_controller.rb
class Customers::RegistrationsController < Devise::RegistrationsC

ジョブカンスクレイピング

# 必要なもの
– selenium-webdriver
– chromedriver

## chromedriver
1. 下記からChromeのバージョンと同じものをDL
http://chromedriver.storage.googleapis.com/index.html
2. 解凍したらファイルを移動

“`
% sudo mv 解凍したchromedriver /usr/local/bin
“`

3.移動したファイルにパスを通す

“`zshに設定する
% export PATH=”/usr/local/bin:$PATH”
“`

## selenium-webdriver
gemをインストールする。

“`
% gem install selenium-webdriver
“`

# プログラムについて
## リポジトリからgit clone

“`
git clone https://github.com/ryumaanai/jobcan.git
“`

## プログラムを編集
1.emailとpasswordを編集する。アスタリスクのところ

Ruby: Starttls でメールの送信

こちらと同じことを Ruby で行いました。
[Python3: Starttls でメールの送信](https://qiita.com/ekzemplaro/items/c248b52a6f36947af080)
hi-ho.ne.jp で試しました。

ライブラリーのインストール

“`bash
sudo gem install mail
“`

“`rb:hi-ho.rb
#! /usr/bin/ruby
# -*- encoding: utf-8 -*-
#
# hi-ho.rb
#
# Jul/08/2020
#
# ———————————————————————
require “mail”
require “dotenv”

STDERR.puts “*** 開始 ***”

Dotenv.load
server = ENV[‘SERVER’]
port = ENV[‘PORT’]
usr = ENV[‘USR’]
password = ENV[‘PASSWORD’]

ハッシュの使い方

これまで配列を多用していたのですが、
ある問題を解いていた時に配列だけでは解決できず、
ハッシュで解決できました。
その学びについてのメモ。

#前提
Aさん、 Bさん、 Cさんの書籍購入費ランキングを作成する。
Aさん、 Bさん、 Cさんという名前の 3人のエンジニアがおり、
それぞれ 1000円, 3000円, 2000円 の書籍購入費を消費。
この場合、 Bさんが 1位となり、 Cさんが 2位、そして Aさんが 3位となる。

それぞれのエンジニアの名前と、書籍の購入情報が与えられるので、
この情報から書籍購入費ランキングを作成する。

##入力
3    -> エンジニアの人数( number_of_engineers )
A B C  -> エンジニアの名前( name_of_engineers )
4    -> エンジニアたちが購入した本の数( number_of_books )
A 1000 -> 本を購入したエンジニアの名前とその本の金額( name, price )
B 1000
B 2000
C 2000

##出力
B
C
A

#解き方

“`ruby
nu

?Gem::LoadErrorが出て、sqlite3をバージョン指定したが改善されない。

初めまして、Macを使っており、最近ターミナルを初めて触り、Rubyをやり始めた者です。
開発環境を整える際につまづいていることについて質問をさせていただきたいです。

現状のバージョンは以下です。
![スクリーンショット 2020-07-08 14.40.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669725/0382963a-9b9e-2356-9767-f75640e6d908.png)

現在、Gemfileに’sqlite3’のみ書かれていたものを、
gem ‘sqlite3’, ‘~> 1.3.13’
と書き換えたりしましたが、ローカルホストにアクセスしようとした時に以下の表示が出てしまい、
改善されません。

![スクリーンショット 2020-07-08 15.14.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669725/7f6db731-5378-5b1d-145e-af733f2e

form_withのform.〇〇について

##form_withのform.〇〇について

form.withのform.〇〇について、わからないところがあったので、備忘録としてまとめていく。

###form.text_field

“`ruby:
<%= form.text_field :title %>
“`
幅20文字の入力欄が設定される

###form.text_area

“`ruby:
<%= form.text_area :content %>
“`
40×20の入力欄が設定される

###form.email_filed

“`
<%= form.email.field :email %>
“`
投稿内容に@が含まれていないとメールアドレスとみなされず、エラーになる。
テスト時に注意!

他にもいろいろあるが今回はメールの入力欄にてテスト時にエラーが出たので、備忘録としてまとめた。