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

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

Ruby on Rails レコード検索、無ければ作成 find_or_create_by メソッド

# find_or_create_by メソッドとは?
find_or_create_by メソッドとは、findメソッドとcreateメソッドが合わさったメソッドであり、
引数に渡した条件に該当するレコードをテーブルから検索し
該当するレコードがあれば取得、無ければ作成してくれるメソッド。

# 使い方
**モデル.find_or_create_by(検索条件)**

例:usersテーブルの中からnameが”suzuki”のレコードを取得、無ければ作成する場合

“`ruby
User.find_or_create_by(name: “suzuki”)
“`

元記事を表示

【Ruby】vendor/bundleにgemがインストールされたはずなのに、requireでエラー

#経緯
スクレイピングについて少し学習しようと思い、
[Rubyを使って20分でスクレイピングの大元を作る](https://qiita.com/Coolucky/items/5d8e49f2c52c99c7d3c2)を参考に実装。
「Gemはvendor/bundle配下にインストールするようにします。」とあるので、
指示通りbundle installするときに `–path vendor/bundle` のオプションを追加。

#エラー発生
記事の通りのcodeをmain.rbに書き込み、main.rbを実行すると、

“`
training $ ruby main.rb
Traceback (most recent call last):
2: from main.rb:2:in `


1: from /Users/yusaku/.rbenv/versions/2.6.0/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require’
/Users/yusaku/.rbenv/versi

元記事を表示

「RSpecが動かない!」原因はspringだったので調べてみた

あるアプリケーションでRSpecを導入し、いざテストコードを実行したらエラーが出てしまった。
何度見直しても設定や記述に問題はないはずなのに、なぜ動かないのか。。

**原因は「spring」というgemでした。**
下記のコマンドをアプリのディレクトリで入力し、再度テストコードを実行すると正常に作動しました。良かった。

“`
mac@ myApp % spring stop
Spring stopped. ←この表記が出ればOK
“`
ちなみにこのspringはrailsコマンドを入力すると自動で再始動しますのでご安心を。

###このspringというのは何者?
簡単に言えば、railsのキャッシュみたいなものです。
rails newした際に、Gemfileにデフォルトで導入されています。

今回の場合だと、RSpecの導入をする前のキャッシュがたまたま残っており、
その状態でテストコードを実行すると「RSpecなんて使えないよ」っていうエラーが出てしまったようですね。

ちなみにspringの状態を確認するためにはこんな感じで確認できます。

“`
mac@ myApp

元記事を表示

rubyでドローポーカーを作ってみる~実装編2(役)~

## 概要

[rubyでドローポーカーを作ってみる~準備編~](https://qiita.com/r12tkmt/items/56a60f2d69226b2bdcf2)

[rubyでドローポーカーを作ってみる~test-unit準備編~](https://qiita.com/r12tkmt/items/48940d0e09a77d210bf2)

[rubyでドローポーカーを作ってみる~実装編1(カード)~](https://qiita.com/r12tkmt/items/175aa66fd91995f13524)

に続いて。

ソース: https://github.com/rytkmt/ruby_poker

今回は役について実装を行っていきます。

## 役の実装

改めて要件を整理してみます。
– 役は5枚のカードをもとに判定を行う
– プレイヤーは役をもとに勝敗を比較する
– 役の比較をするために「役」クラスを作り`Comparable`を使えば比較ができそう
– 役の中でも、同じ役の際に比較するカードを保持する(1枚)
– 役は英語で「 **hand** 」

元記事を表示

【Rails】validationの記述で気をつけたいところ

モデルにvalidationのコードを記述する際に、個人的に気をつけたい点を記事にしました。

#モデルにvalidatesを設定する際に、{}を使用する場合はカラム名の直後に必ずカンマを入れる!

“`ruby:Post.rb
validates :user_id, {presence: true}
⬆︎
           必ずカンマを入れる!
“`

元記事を表示

binding.pryの使い方【残53日】

binding.pryの使い方がいまいちわかってなかったところ
本日エラー解決のために使用できたので備忘録

新しいチャットルームを作成するというセクションで何度CreateRoomをクリックしてもリロードされる
まあこれはrenderのせいなんだけど
エラー文がでれば解決しやすいものをエラーが出ない
さて困った

ここでbinding.pryの登場

4-1.binding.pry.png
createメソッドのところがどうもおかしいと思ったのでpryにかけてみることに

4-3.binding.pry.png【初心者】rails sが動かない時

rails sと入力すると

“`
Address already in use – bind(2) for 127.0.0.1:3000 (Errno::EADDRINUSE)
“`
とでてしまい、ローカルサーバーが動かないことがありました。
これは他で3000番を使ってしまっているので立ち上がらないということなので、切ってしまいます。

##やり方
3000番ポートで起動しているプロセスのIDを確認します。

“`
$ lsof -i :3000
“`

“`
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 24301 ubuntu 6u IPv4 161869 0t0 TCP *:3000 (LISTEN)
“`
このように出てきます。

今回の場合だと

“`
$ kill -9 24301
“`

とすればプロセスを停止することができるので、再度rails s を試してみてください。

元記事を表示

find, find_by, find_by_sqlメソッドの違いについて

railsの学習を進めていく上で似たようなメソッドが出てきたのでまとめたいと思います。

##findメソッドとは

指定したモデルの`idを引数に設定することでレコードを取得するメソッド`です。

例えば↓↓↓

“`ruby
pry(main)> Tweet.find(1)
(0.4ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ‘,STRICT_ALL_TABLES’), ‘,NO_AUTO_VALUE_ON_ZERO’), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
Tweet Load (0.3ms) SELECT `tweets`.* FROM `tweets` WHERE `tweets`.`id` = 1 LIMIT 1
=> #

元記事を表示

macOS Sierra の Rails 開発環境をアップデートする

## 環境

– macOS Catalina 10.15.6
– Ruby 2.7.1
– Ruby on Rails 6.0.3.2

## ローカルの環境をアップデート

“`bash
# Homewbrew アップデート
% % brew update & brew upgrade
% % brew cleanup
% % brew doctor

# rbenv アップデート
## https://github.com/znz/anyenv-update
% anyenv update

# Ruby インストール
% rbenv versions
% rbenv install -l
% rbenv install 2.7.1
% rbenv rehash
% rbenv global 2.7.1
% rbenv versions
ruby -v

# gem アップデート
% gem update –system

# Rails のインストール
% gem search -l rails # ローカル gems の確認
% gem se

元記事を表示

【ポートフォリオ を作成される方へ】font-awesome-railsの使い方

##font-awesome-railsとは
webフォントアイコンを無料で使えるFont Awesomeを簡単にrailsで使えるライブラリ
Font Awesomeは拡大してもぼやけたりしないことが特徴です。
自分の好みの色やサイズに変更できます。

※font-awesome-railsは最新版に対応していないため、使えるアイコンが少し少ないです。
そんな方にはfont-awesome-sassがおすすめです。

##font-awesome-rails導入
“`ruby:Gemfile

gem ‘font-awesome-rails’
“`
“`
$ bundle install
“`

application.cssの場合

“`
*= require font-awesome
“`

application.scssの場合

“`
@import “font-awesome”;
“`

準備完了

##使い方
基本

“`

“`

サイズ変更

“`
rake db:migrate で ArgumentError: Unknown validator: ‘UniqunessValidator’

sinatraでの開発中、
`reke db:migrate`で
`ArgumentError: Unknown validator: ‘UniqunessValidator’`が出た時の原因と対処

###解決策

uniqnessvlidator?そんなの知らないよ!的な事書いているので、
対応してるモデルに、先に書いててたバリデーションを一旦消しました!

“`user.rb
class User < ActiveRecord::Base # validates :email, presence: true, length: {maximum: 255 }, # format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i }, # uniquness: { case_sensitive: false } # has_secure_password end ``` これで`rake db:migrate`を実行で、そしたらマイグレートされました! ####よくよく見ると、、、 uniquenessのeが抜けて

RubyでFile::Statを使って情報引き出す

メモです。
File::Statはファイルの情報を格納したオブジェクトのクラスです。また、ファイルの所有ユーザ・グループを表示させるためにetc使います。

[class File::Stat \(Ruby 2\.7\.0 リファレンスマニュアル\)](https://docs.ruby-lang.org/ja/latest/class/File=3a=3aStat.html)

[module Etc \(Ruby 2\.7\.0 リファレンスマニュアル\)](https://docs.ruby-lang.org/ja/latest/class/Etc.html)

“`ruby
require “etc”
stat = File::Stat.new(“aaa.rb”)

puts stat.uid #=> 501
puts stat.gid #=> 20
puts stat.size #=> 1738
puts stat.mtime #=> 2020-07-23 16:46:50.584154183 +0900
puts stat.uid #=> 501
puts Etc.g

[Rails]ancestryを使った時のちょっとしたつまづきから学んだこと

# はじめに
個人制作でファッション系ECサイトを制作した時に「階層のあるカラム」を実装したいと思い、まさにそれを実現してくれる**ancestry**を使用した時のちょっとしたつまづきから学んだことを備忘録として残しておきます。

**また、本記事は手順書ではなく、初学者が陥りがちな失敗の紹介です!**

※実装の手順等は割愛します。Qiitaにもたくさん他の方の記事があるので以下参考にしていただければと思います。
[ancestryによる多階層構造データを用いて、動的カテゴリーセレクトボックスを実現する~Ajax~](https://qiita.com/ATORA1992/items/bd824f5097caeee09678)
[ancestryで作ったセレクトボックスに初期値を表示する方法](https://qiita.com/hukuro310/items/1843d22b4ea29c2b1692)

# 実現したいこと
ancestryを用いた以下の動的なセレクトボックスを**編集時も有効にしたい**です。

[![Image from Gyazo](https://i.

Rubyで文字コードをUTF-8からShift-jis の変換に詰まったお話

# Rubyで文字コードをUTF-8からShift-jisに変換に詰まったお話

現職でCSV吐き出しの時に文字列のデフォルト文字コードをShift-jisにして欲しいという依頼がありました。

Rubyの文字列のデフォルト文字コードはUTF-8になるので、それをCSV吐き出しの時にShift-jisに変換するだけで実現できるので余裕だと思ったのですが、以外にハマりました。

同じようにハマってる人がいるかもしれないので、解決方法を記載します。

# ハマった実装箇所

RubyのライブラリのCSVクラスのgenerateメソッドを利用すればCSV吐き出しは割と簡単に実装できます。

実装イメージ

“` ruby
require “csv”

text =<<-EOS id,first name,last name,age 1,taro,tanaka,20 2,jiro,suzuki,18 3,ami,sato,19 4,yumi,adachi,21 EOS csv = CSV.generate(text, headers: true) do |csv| csv.add

[Rails]deviseで思わぬバリデーションエラー

# はじめに

ユーザー管理でお世話になっているdeviseで思わぬエラーにハマり、かなりの時間を溶かしたので備忘録として残しておきます。

# 環境/Gem(ver)

* Ruby (2.5.1)
* Rails (5.2.4.3)

# 結論

**自分でUserモデルにvalidatesをかける時は気をつけよう。**

ちゃんと下調べをして今後実装するようにします。。

# 前提

devise を bundle install 後、以下のように Userモデルにバリデーションをかけていました。
passwordには7文字以上の制限をかけたいと考えていました。

これで、新規ユーザーの登録は問題なくできていました。

※UserとShopは多対多の関係で中間テーブルにStylistテーブルがあるイメージで実装しています。

“`ruby
(models/user.rb)
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmab

27歳プログラミング未経験から開発エンジニアになる話

###どーも「りょうちん」と申します。
###今回の記事は、Webエンジニアになるためにすべきこと!というテーマです!
先日、業界未経験からエンジニアになるチャンス頂きました。27歳、前職ネジ売ってました男子です。 今は試用期間中ですけど、実務でプログラミングできることがめちゃ嬉しいです。
これからプログラミング学ぼうかなーて考えてる人とか、どうやったらエンジニアなれんの?ってかエンジニアなるのって簡単そう?ってネット記事に踊らされそうになってる方。笑
####是非読んでください!!エンジニアになるのってそんな甘くないです!!
#####ちなみに僕は、Kintoneでのシステム提供を現在主軸としている会社に勤めさせていただくことになりました。主にJavaScriptを使用します。ですので、今後はKintone、JavaScript周辺情報をメインに発信させて頂きます。
これから出来るだけ毎日投稿していきますので、Twitterフォローお願いしますー!

####で本題です!ずばり未経験からエンジニアになるためにはどーすりゃいいの?
先に結論書きますと、

[herokuデプロイ手順③]Rubyのバージョン指定からデプロイしてアプリへのアクセスまで(完)

## はじめに
今回は前回の続きでherokuデプロイを実行し、アプリへのアクセスまで行い、herokuデプロイにおける工程のアウトプットを完了させたいと思います。

前回の**[herokuデプロイ手順②]新しいアプリの作成からindexアクション表示まで**をまだ読まれていない方はそちらを先に確認して下さい。(下記URLから)
https://qiita.com/nkekisasa222/items/52c872957b30f4e8de1e

## 環境
Rails 5系
macOS catalina 10.15

## Rubyのバージョンを指定する
Rails 5にはRuby 2.2.0以降が必要なので下記コマンドで確認。

“`ターミナル.
$ ruby -v
“`

次に、確認したバージョンを下記のようにGemファイルに記述。

“`Gemfile
ruby ‘確認したバージョン’
“`

## アプリをGitに保存する
まずGitがインストールされているかの確認。

“`ターミナル.
$ git –help
usage: git [–version] [–

Rubyのattr_accessorとは

“`ruby
class Example
attr_accessor :a, :b
def initialize(a,b)
@a = a
@b = b
end
end

@ex = Example.new(“A”, “B”)
@ex.a # =>”A”

““

attr_accessorは引数のシンボルと一致するインスタンス変数のセッターとゲッターのメソッドを定義するメソッド。
この場合、”a”がゲッター、”=a”がセッターである。
つまり、attr_accessor :a で”a”,”=a”というメソッドを作ったということだ。

“`ruby
@ex.methods.grep /a/ # => [:a.:a=,…]
“`

プログラミング学習を効率化するための情報整理の方法

# 1. はじめに
どうも、プログラミング初心者です。**只今、絶賛絶望中**です。

プログラミング学習をするにあたり、以下のようなことを思案します。

「思ったより前に進まない」「なぜなら学ぶことは膨大だから。しかも聞けば3年前に学んだ知識が陳腐化するくらい技術の進歩は早いらしい」「どこまで学べばいいの!!!!?」「自分は今どこにいるの!?何を学習してるの!?!?」「この技術はどの分野の技術!?この言葉はどの分野の言葉!?」「この技術のメリットは?どう使うの!?」

錯乱に次ぐ錯乱。精神異常、自暴自棄、圧倒的興奮状態。金切り声を上げて今日も夜道を這い回る。狂気。

モルヒネがほしい。モルヒネを寄越せ。身体を狂気に支配されたこの俺様を止めてくれ。

とこのような状況です。help me。

IT業界に足を踏み入れたはいいが、上記のような思案をしながら日々勉強をしています。そして、やっていくうちに**「膨大な技術情報をなんとなくこういう風に仕分けたら見やすいんじゃね?」**ということに気づいてしまいました。たった今、私は蓮舫を超越し、現神人へと進化を遂げたのです。民衆よ、崇め奉れ。

rails test で発生する LoadError (cannot load such file — bcrypt) を解決する (Railsチュートリアル 6章)

自分がrailsチュートリアルを進めていく上で、発生したエラーを記録していきます。
ハードはMacBook Air, 開発環境はVScodeを用いています。

#Rails チュートリアル 6章 6.3 セキュアなパスワードを追加する

####LoadError (cannot load such file — bcrypt) のエラーが発生するまでのあらすじ

add_password_digest_to_usersというマイグレーションファイルを生成し、データベースでマイグレーションを実行します。

“`
$ rails generate migration add_password_digest_to_users password_digest:string
$ rails db:migrate
“`
Gemfileにbcryptを記述し、$ bundle install を実行します。

“`:Gemfile
gem ‘rails’, ‘5.1.6’
gem ‘bcrypt’, ‘3.1.12’
“`
“`
$ bundle in