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

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

Kinx 実現技術 – Switch-Case

# Switch-Case

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。作ったものの紹介だけではなく実現のために使った技術を紹介していくのも貢献。その道の人には当たり前でも、そうでない人にも興味をもって貰えるかもしれない。

前回のテーマは[構文解析](https://qiita.com/Kray-G/items/f198a8b105b37fd43fab)。今回のテーマは Switch-Case。

* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* リポジトリ … [https://github.com/Kray-G/kinx](https://github.com/Kray-G/kinx)

## Switch-Case

なぜ Switch-Case

元記事を表示

headerとflashの間にできた謎の余白を消す(Devise, Bootstrap)

#はじめに
先日投稿した[こちら](https://qiita.com/Roy1473/items/b7e6eede261c63ea9216)で
Bootstrap + jQueryを使ってFlashなどの
``をクリックした時にFlashを閉じる機能を実装しました。
ただ、ブラウザ場で確認すると、
Flashが消える前、後、双方で

との間に余白がないようにぴったり合わしているにも関わらず
`

`と`flash`の間に余白が発生していました。

この余白を無くすことができたので紹介します。

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

#前置き (layoutのデザイン)

“`html:header.html

元記事を表示

重要なgemのうち、開発が止まってしまったgemがいくつあるか集計してみた

[core-jsがメンテされていない理由](https://qiita.com/yumetodo/items/eaf3b97aeae3d8c4a07e)を読みました。この記事によると、core-jsというJavaScript界隈の重要な(しかし一般の開発者にはほとんど知られていない)ライブラリのメンテが止まってしまったとのこと。

[JavaScript界隈の特殊な事情](https://yosuke-furukawa.hatenablog.com/entry/2016/03/27/152500)があるにせよ、Rubyにも、開発が止まりそうなgemはたくさんある気がします。そこで、重要なgemのうち、開発が止まりそうなものがいくつあるのかを調べてみました。

## 先に結論

重要なgemのうち、開発が既に止まっているものは0件でした。「利用者数に対して開発者が極端に少ない」という意味で止まる可能性が比較的高いものは minitest gemでした。

補足:minitest gemについては、主なコミッタの人数が少ないだけです。今も活発にコミットされています。今すぐ何かがあるわけで

元記事を表示

PHP サイト でも Capistrano (Ruby Gem)

## 環境

* Ruby 2.6.5

## 設定手順

### Capistrano 設定ファイルの用意

“`sh
bundle add capistrano
bundle exec cap install
“`

これで必要なファイルが作成されます。

あとは `deploy.rb`, `config/deploy/*` を変更して設定完了です。

ファイルを置けば使えるPHPサイトなら、認証設定程度を記述すればOKです。

### 設定ファイル例

“`ruby:staging.rb/production.rb
# server configuration
role :web, %w{ec2-user@123.123.123.123}
# file location
set :deploy_to, “/var/www/xxx”
“`

“`ruby:deploy.rb
# application name
set :application, “xxxxxx”
# repository
set :repo_url, “sample@sample.git.jp:/sa

元記事を表示

【RSpec】paramの書き方

## はじめに
paramとして渡された引数を使うメソッドのテストをするときに、データの作成方法で悩んだので備忘として残します。
`save_hoge`メソッドの中でprivateメソッド、`save_user_hoge!`が呼び出されます。
`hoge`は、メソッド内でparamとして使用されるため、形を整える必要がありました。

### メソッドのコード(省略してます)

“`rb:app/models/user.rb
def save_hoge
save_user_hoge!(hoge)
end

private
def save_user_hoge!(hoge)
if hoge[:first_hoge_id].present?
user_hoge.create(
hoge_id: hoge[:first_hoge_id].to_i
)
end
if hoge[:second_hoge_id].present?
user_hoge.create(
hoge_id: hoge[:sec

元記事を表示

関連する子モデルの情報を含んだフォームのバリデーションテスト(Rspec)

## はじめに
スクールでフリマアプリ開発の際、出品フォームのバリデーションテストを担当しました。
その時、出品画像のバリデーションテストで苦労したので、復習も兼ねて記事に残そうと思います。

## 今回のケース
0a9433558f4c9427fbc2f041c4edba3c.png

– 商品名や商品説明を保存するテーブル(productsテーブル)と、出品画像を保存するテーブル(imagesテーブル)が分かれて存在している。
– アソシエーションは、has_many :images と、belongs_to :product の関係である。
– 1つのフォームから、複数のテーブルにデータを送信して保存する実装をしている。
– Productモデルに、validates :images , presence:

元記事を表示

[Ruby on Rails]CSVファイルを使い、データを一括でDBに読み込ませる方法

#はじめに
seed内でデータを作成するのが面倒だったので、Excel(Numbers)でデータを作成し、一括でDBに読み込ませる方法をまとめました!

【環境】
私はMacを利用しているので、初期搭載されていて、無料で使えるNumbersを使用。
(重複セルを見つけい場合や複雑な処理はExcelを使用。)
#使い方
##CSVファイルを作成

1. 1行目にキーとなる任意の名前をつける。(対応するDBの項目名と同じにすると分かりやすい)
2. 2行目以降にデータを打ち込む。

スクリーンショット 2020-03-22 18.14.00.png

3.データを作成したら ファイル → 書き出す → CSVを選択
スクリーンショット 2020-03-22 18.25</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Ruby</div>
<div class='tag-cloud-link'>CSV</div>
<div class='tag-cloud-link'>seed</div>
<div class='tag-cloud-link'>一括</div>
<div class='tag-cloud-link'>Rails5</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/kamada-enginner/items/31652499065d2579a4f4'>元記事を表示</a></div>
<h3 id=【Rails】いいね機能の実装

現在絶賛作成中のポートフォリオでいいね機能を実装する際、色々躓いてしまったので反省もかねてメモしとこうと思います。

#環境
– Rails 5.2.2
– mysql 8.0.17
– macOS

#実現したいこと
Twitterのようないいね機能の実装。

##そのために必要な処理
いいねボタンを押下した場合、

– 「いいねしたユーザーのid:user_id」と「いいねされた投稿のid:post_id」が「中間テーブル:likesテーブル」に保存される。
– いいねボタンが「いいね追加」と「いいね削除」で切り替わる。

##必要手順
1. 中間テーブルの作成
2. テーブルの紐付け
3. ルーティングの設定
4. コントローラー側の処理
5. ビューでの表示処理

大体こんな感じです。

では順番に見ていきましょう。

#中間テーブルの作成
まずは、「いいねしたユーザー」と「いいねされた投稿」を保存するテーブルの作成からです。

“`
$ rails g model Like user:references post:references
“`

referencesを指定

元記事を表示

VSCodeでRubocopを使う

##Rubocopとは
Rubyのコード解析ツール。Gem。
修正した方が良い書き方を指摘してくれたり、自動で修正してくれたりします。

##導入
“`rb:Gemfile
group :development do
gem ‘rubocop’
“`
“`terminal
$ bundle install
“`
以下のコマンドで、コード解析が走ります。

“`terminal
$ rubocop
Inspecting 67 files
……..CCC…CC.C……………………………………CC.C…

67 files inspected, 24 offenses detected
“`
`-a`オプションをつけると、自動で修正できるところ(クォーテーションの種類を変えるなど)を修正してくれます。

“`terminal
$ rubocop -a
“`
##設定ファイル
###`.rubocop.yml`
プロジェクトルートに作成して、無視するルールや無視するディレクトリ等を指定することができます

元記事を表示

gem active_model_serializers のドキュメントを翻訳しました

# 概要
gem [active_model_serializers](https://github.com/rails-api/active_model_serializers) の version [0-10-stable](https://github.com/rails-api/active_model_serializers/tree/0-10-stable) のドキュメントを翻訳しました。
Rails で API を作成するときに active_model_serializers を使うことも多いと思うので、参考になれば幸いです。

# 目次

– [**Adapters**](#adapters) [原文](https://github.com/rails-api/active_model_serializers/blob/0-10-stable/docs/general/adapters.md)
– [Built in Adapters](#built-in-adapters)
– [Attributes(デフォルト)](#attributes%E3%83%

元記事を表示

Unknown action [初心者備忘録]

#Unknown action
railsでアプリを作成していたところ、初めて見るエラーが発生しました。
結果からいうとコードの誤記という恥ずかしいイージーミスでしたので、反省と忘れないために書きたいと思います。

##エラー発生
Users::RegistrationsControllerのnew_credit_cardアクションを実行したところ以下のエラーが発生しました。

““
Unknown action
““

““
The action ‘new_creditcard’ could not be found for Users::RegistrationsController
““

なるほど、アクションがないのか。
ということで、RegistrationsControllerを確認します。

##解決
以下がコントローラーで当該のアクションを呼び出してる箇所とroutes.rbです。

““uses/registrations_controller.rb
render :new_credit_card
““
““config/routes.rb

元記事を表示

【Rails】バリデーションによるエラーメッセージ表示の手順

##はじめに
Railsで、バリデーションによるエラーメッセージの表示をしようとしたら
エラーが出てしまい、調べてみたらとても初歩的なミスを犯していたので
忘れないよう、エラーメッセージ表示の手順を、自分用のメモみたいな感じでまとめました!

##手順
「新規投稿」を例にとることにします。

まず、新規投稿が行われる手順から
順を追って、バリデーションによるエラーメッセージの表示方法について説明していきます。

1.まずは、modelフォルダの中のpost.rbファイルの中で、バリデーションを設定します。
これによってバリデーションに弾かれたデータには自動でエラーメッセージが取得されます。

“`ruby:models/post.rb
class Post < ApplicationRecord validates :content, presence: true, length: {maximum: 140} end ```
2.「new.html.erb」で投稿ボタンを押すと、form_tagで指定したUR

元記事を表示

【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