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

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

【Ruby】最新バージョンにしようとしてハマったこと

rbenvでバージョンがうまく切り替わらなかったことはありませんか?
Macのrbenvで最新バージョンにしようとしてハマったことを共有したいと思います。

## 最新バージョンまでの流れと状況
### rbenvのバージョン一覧を確認
`$ rbenv versions
=>
system
2.3.7
2.4.1
* 2.5.1 (set by /Users/use_name/.ruby-version)`

### Homebrewをアップデートして、rbenvをアップグレード
`$ brew update`
`$ brew upgrade rbenv ruby-build`

### rbenvからインストールできるRubyのバージョンを確認
`$ rbenv install -l`
### たくさん出てきますが2020年3月22日時点での安定最新バージョンの2.7.0をインストール
`$ rbenv install 2.7.0`

### 再度、rbenvのバージョン一覧を確認
`$ rbenv versions
=>
system
2.3.7
2.4.1
* 2.

元記事を表示

jQueryでFlash, error_messageを閉じる方法(Bootstrap xボタンが反応しない場合)。

##はじめに
Bootstrapの`flash`,`error_messages`などに使われる
`

`
が閉じない場合の対処法です。
私の環境が悪く閉じるアクションができないのか定かではありませんが
`jQuery`を使って閉じるアクションを可能にする方法を書いておきます。

私の場合、xマークのボタンは表示できましたがクリックをしても一切反応しませんでした。

##開発環境
– bootstrap-sass (3.3.7)
– devise (4.7.1)
– jquery-rails (4.3.1)
– rails (5.2.4.1)

##Flashやerror_messagesにxボタンをつける
[こちら](https://www.w3schools.com/bootstrap4/bootstrap_alerts.asp) Bootstrap4版
[こちら](https://www.w3schools.com/bootstrap/bootstrap_alerts.asp) Bootstrap3版
上記のサイト

#Ruby の pry で コマンド履歴を検索して戻る/進むショートカット ( reverse-i-search / i-search ) ( Mac )

# reverse-i-search

– Ctrl + R で pryのコマンド履歴を検索できる
– 検索中にもういちど Ctrl + R を押すと、検索結果をひとつずつ過去に戻れる
– だがしかし、いちど戻ると、そこから逆に進む方法が分からない
– 戻ってから進む方法が分からずに、たまに調べては諦め、そして5年が過ぎた

![image](https://user-images.githubusercontent.com/13635059/77210737-0d672380-6b45-11ea-90e8-0afd262b70ff.png)
![image](https://user-images.githubusercontent.com/13635059/77210738-0e985080-6b45-11ea-85c7-3bd06a161044.png)

# 解決は .inputrc

`~/.inputrc` に以下を設定する

“`
“\C-t”: forward-search-history
“`

– pryの設定ではなく、実行するシェルの設定
– .bash_pr

Railsプロジェクト作成手順

# 環境
– macOS Mojave 10.14.6
– rbenv 1.1.2
– Homebrew 2.2.10
– ruby 2.7.0
– Rails 6.0.2.2

# 方法

## 1. ディレクトリを作成する。
“`
$ mkdir practice_project
“`

## 2. 作ったディレクトリに移動する。
“`
$ cd practice_project
“`

## 3. Gemfileを生成する。
“`
$ bundle init
“`

## 4. Gemfileを編集する。
“`:Gemfile
# frozen_string_literal: true

source “https://rubygems.org”

git_source(:github) {|repo_name| “https://github.com/#{repo_name}” }

gem “rails” ←コメントアウトを外す
“`

## 5. Gemをインストールする.
“`
bundle install –path vendor/bundle

rbenvを利用してRubyのバージョンを最新安定版にする

# 環境
– macOS Mojave 10.14.6
– rbenv 1.1.2
– Homebrew 2.2.10

# 方法
## 1. 公式サイトで最新版を確認する。
https://www.ruby-lang.org/ja/downloads/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265399/209cb11e-d164-ec3b-42c8-94e6bfe0987d.png)

## 2. rbenvのインストール可能なバージョン一覧に、1.で確認したバージョンがあるか確認する。
“`
$ rbenv install –list
“`

### (もし確認したバージョンが無い場合)
以下のコマンドで、rbenvとruby-buildを更新する。

“`
$ brew upgrade rbenv ruby-build
“`
再度、rbenvのインストール可能なバージョン一覧に、1.で確認したバージョンがあるか確認する。

“`
$ rbenv instal

railsストロングパラメータについて

#はじめに
ストロングパラメータについて調べたので備忘録として記事にしました。

###対象読者
プログラミング勉強始めたての方。

###題材
自分のポートフォリオのUserオブジェクト周りを題材としています。

#ストロングパラメータとは
ユーザー登録フォームなどによって送られてきた情報を限定して取得し、データベースに一気に保管出来るようにした処理のことです。なぜ、情報を限定するかというとユーザー側にいじって欲しくない情報をデータベースに保存させないようにするためです。
例えば管理者情報などをいじられて勝手に管理者にならないようにしています。
また、複数カラムにデータを保存できるようにする役割もあります。
実際に設定しているものがこちらです。

“`ruby:app/controllers/users_controller.rb
def create
@user = User.new(user_params)
if @user.save
log_in @user
flash[:success] = ‘ユーザー登録完了’
redi

LoadError, Unable to autoload constant ~

#本記事投稿のいきさつ
railsでアプリ作成をしていたところLoadErrorが発生し基礎知識がなかったためにハマったため忘れないように、書き残します。
また、同じエラーで困っている初心者のためになれば幸いです。

##エラー発生
itemモデルとitem_imageモデルでアソシエーションを組み,以下の記述をしたところエラーが発生

““items_controller.rb
def new
@item = Item.new
@item_images = Item_image.new
end
““

エラー表示は以下です。

““
LoadError in ItemsController#new
““

““
Unable to autoload constant Item_image, expected *****/models/item_image.rb to define it
““

##解決まで
なるほど。アソシエーションの記入を間違えたのか。
と初学者の自分は考えitem_image.rbを確認します。
item_imag

ダックタイピング

# ダックタイピングとは
> もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルに違いない

(wikipediaより)

“`ruby:Rubyの例
def test(foo)
puts foo.sound
end

class Duck
def sound
‘quack’
end
end

class Cat
def sound
‘myaa’
end
end

test(Duck.new)
test(Cat.new)
“`

“`:出力結果
quack
myaa
“`
wikipedia読んでもだからなんなのというか、なんにも特別なことをしているように感じなかったのですが、調べるとどうやらそうではないことに気づきました。

# 型を意識しなくて良い
[Javaと比較しているサイト](https://blog.mmmcorp.co.jp/blog/2018/10/26/go-duck-typing/)があり、そのコード例によりメリットが理解できました。

“`ruby:ruby
def

Pay.jpを用いた購入機能の実装

##概要
Pay.jpを用いた購入機能の実装を備忘録としてまとめます。
修正点ありましたらご指摘お願いいたします。
Transaction(取り引き)テーブルおよびProduct(商品)テーブルをもとに作っていきます。

##前提
* Pay.jpのアカウント作成済み
* Pay.jpにてクレジットカード登録機能は実装済み
* ビューはHamlで記載
* deviseにてログイン済み

##手順

1. Transactionテーブルを作成(購入済みの場合SOLD OUTを表示させるため)
2. アソシエーションの設定
3. Transactionコントローラーを作成
4. 環境変数の設定
5. ルーティングの設定
6. マークアップ:購入内容確認画面
7. マークアップ:購入完了画面
8. マークアップ:購入済みの場合SOLD OUTを表示
9. 購入データの確認

##Transactionテーブルを作成
今回は購入済みの場合SOLD OUTを表示させるためにTransactionテーブルを作成します。

“`
$ rails g model Transaction
“`

`

docker-compose buildでYou must use Bundler 2 or greater with this lockfile.とエラーが出た話

##経緯

「既存の作成済のrailsアプリケーションにDockerを導入してみたい!!でも、いきなり導入していろいろ変なことになったら嫌だな」ということで、[Railsチュートリアルの開発環境をDockerにしてみなイカ?](https://qiita.com/Moo_Moo_Farm/items/0d08da27371272ed1390)という記事を参考にさせていただき、まずはrailsチュートリアルをdockerにのせようと、奮闘している最中、

“`console
You must use Bundler 2 or greater with this lockfile.
ERROR: Service ‘app’ failed to build: The command ‘/bin/sh -c bundle install –jobs=4’ returned a non-zero code: 20

“`

というエラーが。。

##解決した方法

“`console
You must use Bundler 2 or greater with this lockfil

#Ruby の tap で ネストされたハッシュのキーを削除しつつ返り値で変更後の値を受け取る

`hash[:foo][:bar]` のキーを削除したい

“`rb
{foo: {bar: 1, yah: 2} }.tap { |h| h[:foo].delete(:bar) }
# => {:foo=>{:yah=>2}}
“`

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/3041

[Rails]いいねした商品をマイページに一覧表示する

ユーザー(user)のマイページ(show)にいいね(like)した商品一覧を表示させます。
**モデルの指定は[こちら](https://qiita.com/yummy888/items/2b7708a498861e5ba733)に記載してます。**

# ルーティング
“`routes.rb
resources :users, only: [:index, :show] do
collection do
get :likes
end
end
“`
userのshowアクションにネストさせます。

# モデル
“`user.rb
has_many :likes, dependent: :destroy
has_many :like_items, through: :likes, source: :item
“`
※今回のポイント
`like_items`でuserがどのitemにいいねしているか取得できます。

# ビュー
“`users/_side-bar.html.haml
.side-bar
%section.side

[Rails]非同期のいいね機能実装

ユーザー(user)が出品した商品(item)にいいねできる機能を実装してます。

## Likeモデル、テーブル作成
`rails g model Like`

“`like.rb
class Like < ApplicationRecord end ``` ```XXXXXXXXXXX_create_likes.rb class CreateLikes < ActiveRecord::Migration[5.2] def change create_table :likes do |t| t.integer :user_id t.integer :item_id t.timestamps end end end ``` `rails db:migrate`マイグレーションファイル実行 ## モデル 通常はuserとitemは1対多の関係ですが、いいね機能実装時に関してはlikeテーブルが加わるので、多対多の関係になります。 ```user.rb has_many :likes, depen

[Ruby on Rails]enumを用いたselectフォームの作成

selectを作る際に、選択肢が3つ程度のものであればoptionで記載しても良いかとは思いますが、多くなればコードが冗長になってしまいます。
enumを用いているカラムに対してであれば、スッキリ綺麗なコードで実装できます。
#実装した機能
gyazoリンク
[https://gyazo.com/67a692c100281014ff59426fa6eb1a53](https://gyazo.com/67a692c100281014ff59426fa6eb1a53)
#enumとは
列挙型、列挙クラスといわれる。
本記事はenumについてではないため、ザックリとした説明になりますが、
自分の認識では、
わざわざ、tableを作成し、外部キーとして呼ばなくとも中身を持ったidとして管理できるもの
#どんなものに使うのか?
enumを使う代表的なものといえば、都道府県でしょうか
optionで書くのも面倒ですし、テンプレを使ったとしても冗長で読みやすいコードとは言い難いですね。

“`ruby:product.rb
enum delivery_prefecture:{
“北海道

複数画像投稿で盛大に自爆した時の確認事項[備忘録]

##はじめに
某フリマアプリの模倣アプリを開発中、出品機能実装で複数画像の登録に死ぬほど手を焼いたので、備忘録として掲載します。

誤った記述などあればご指摘いただけると幸いです。

##開発環境・前提

Ruby 2.5.1p57
Ruby on rails 5.2.3
jquery-rails 4.3.5
haml-rails 2.0.1
sass-rails 5.1.0
CarrierWave 2.1.0

##完成コード

先に完成コードを載せておく。

“`image.rb
belongs_to :item, optional: true
validates_presence_of :item
validates :content, presence: true
mount_uploader :content, ImageUploader
“`

“`item.rb
belongs_to :brand, optional: true
belongs_to :user, optional: true
belongs_to :categor

Railsチュートリアルメモ – 第13章

[メモの目次記事はこちら](https://qiita.com/yokohama4580/items/dedfd5510080273dc2a0)

[公式Railsチュートリアル第13章へのリンク](https://railstutorial.jp/chapters/user_microposts?version=5.1#cha-user_microposts)

## サマリ
– マイクロソフトの表示、投稿、削除
– モデルの関連付け(`has_many`および`belongs_to`)
– モデルを使ったレコードの取得(取得条件、並び順、取得件数の指定)
– ラムダ式 (Stabby lambda) を使ったProcオブジェクトの生成
– Homeページの動的な出し分け
– CarrierWaveを使った画像ファイルのアップロード
– ImageMagick(+MiniMagick)を使った画像ファイルのリサイズ
– 本番環境でのfogを使ったS3への画像アップロード

## ポイント
– `rails generate model`の際、`references `を指

Leet文字列への置換問題

## Leet文字列とは
Leetとはアルファベットを似た形の数字や記号などに置き換えて表記するネットスラングです:point_up_tone1:
初めて解いた問題だったので、忘れないようにメモしておきます!

## 問題
paiza leet問題.png
入力されたアルファベット大文字の文字列を、上記に該当するアルファベットの場合、数字に置換して出力せよ。

## 解法

Leet文字列を置換するためには、“`gsub“`を使用します。
“`gsub“`は、正規表現にマッチした全ての部分を置き換えてくれるメソッドです。

まず、入力される文字列を変数(ここではstring)に定義します。

“`ruby:
string = gets
“`

そして、複数のパターンにおいてgsubを使う今回の場合、

jwtで認証を実装する時のrspecテスト

# はじめに
今参加させていただいているスタートアップでapi実装をしており、認証をfirebase authenticationに頼っているのですが、rspecでテストを行うときにjwtの認証をよしなにスキップする方法でめちゃめちゃハマったのでその備忘録です

# 元々のコード(説明のためかなり省略しています)

“`ruby:applicatioion_controller.rb
class ApplicationController < ActionController::Base before_action :authenticate! private def authenticate! if request.headers['Authorization'].present? jwt = request.headers['Authorization'] # jwtを渡すと検証を行いユーザーの情報を返してくれる独自モジュールを呼び出し @user_info = Firebase::JwtAuth.authenticat

[PostgreSQL]テーブルの項目の型の調べ方/確認の仕方

##はじめに
PostgreSQLで実装中に「今のテーブルのそれぞれの項目の状態ってどうなってたっけ?」
となったときに、カラムの型の確認の仕方がまとまっていなかったので、まとめる

##環境
macOS Catalina
Ruby 2.5.1
Rails 5.0.7.2
PostgreSQL 12.2

##確認方法

###1. `psql -l`で、確認したいテーブルが含まれるデータベースの名前を確認する
PostgreSQLにあるデータベースが一覧表示されるので、確認したいテーブルが含まれるデータベース名をコピーしておく

“`terminal:ternminal
$ psql -l #PostgreSQLのDBを一覧で表示する

##実行結果 (今回は「app-name_development」が対象)
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges

フリマアプリの出品テストが上手く書けない人へ

**初投稿です!**
どうか優しい目で見てあげて下さい。お願いします!

さてさて、今回はテストコードの初歩的な事について備忘録的に書き残していこうかと思います。

フリマアプリを開発上で、商品(product)の出品時の

**「必須項目が全て入力してある際は登録できる」**

といったテストコードを書こうと思います!


今回登録する中身はこちら↓

###productsテーブル
| カラム名 | 型 | オプション |
|:—————–|——————:|:——————:|
| name | string | null: false |
| price | integer | null: false |
| description(商品説明) | string | null: