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

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

railsのlocal環境をhttpsにしてみた。

## 環境

>ruby 2.5.1
rails 6.0.3.2
mac catalina 10.15.5

## mkcert install
[Git mkcert](https://github.com/FiloSottile/mkcert)

“`
$ brew install mkcert
“`
localにCAを作成

“`
$ mkcert -install
“`
## 証明書とキー発行
作成中のapplicationのフォルダへ移動
該当アプリの.gitignoreに下記追加。※Gitに挙げないため。

“`
localhost.pem
localhost-key.pem
“`
以下を実行

“`
$ mkcert localhost
“`
これで、
localhost.pem
localhost-key.pem
の2つのファイルが出来上がります。

## config/puma.rbを編集
“`
if ENV.fetch(‘RAILS_ENV’) { ‘development’ } == ‘development’
ssl_bind ‘0.0.

元記事を表示

RSpecの自動的にロードされるパスについて

# 要約
RSpec実行時に自動的にロードされるパスがあります。(下記の2つです)

– `./lib`
– `./spec`

Railsプロジェクトを触っていると、
そもそもRSpecの自動的にロードされるパスを気にする必要はあまりないのですが、
`Rubyのみのプロジェクト + RSpec` で動作を確認する時は知っておきたい情報ですね。

これがgem内のどこで設定されているのかを調べました。
ついでに [default_path](https://www.rubydoc.info/gems/rspec-core/RSpec%2FCore%2FConfiguration:default_path) についても記載しています。

# 対象のバージョン
– [rspec-core](https://github.com/rspec/rspec-core): `3.9.2`

# ロードの設定箇所
では、実際にgem内のどこでパスをロードしているのかを確認します。

## `$LOAD_PATH` に パスを追加するメソッド

[$LOAD_PATH](https://docs.ru

元記事を表示

自作ログイン機能

#事前情報
####セッション
**「サーバ側に用意された一つのブラウザから連続しておくれらている一連のリクエスト間で「状態」を共有できる仕組み」**のことを言う
セッションがなければ、同じユーザから送られた一つ目のリクエストから二つ目のリクエストに情報を受け渡すことができない

“`ruby:controller
#セッションにアクセス
session[:user_id] = @user.id

#セッションの値の取り出し
@user.id = session[:user_id]
“`
####Cookie
ブラウザとwebサーバの間での情報の受け渡し。
**「複数のリクエストの間で共有したい「状態」をブラウザ側に保存する仕組み」**

#Userモデルを作る

“`command
rails g model user name:string email:string password_digest:string
#同じパスワードから生成すると同じだが、それ自体は無意味な文字列
“`
“`ruby:migrationfile
class CreateUsers < Acti

元記事を表示

Bootstrap導入手順をまとめてみた(RubyonRails)

初めまして!
弱弱駆け出しエンジニアのてしまと申します。

初投稿です!

今回は**RubyonRailsでのBootStrapの導入手順**についてまとめてみました。
導入自体は簡単です!
もし僕のような初学者でBootstrapに興味がある方は参考になればと思います。
実際に使った例も載せているため後半は長くなっております。

#内容
①RubyonRailsにBootstrapを導入
②Bootstrapを使ってテーブルとボタンの装飾

#対象者
・RubyonRailsで簡単なアプリケーションを立ち上げたことがある
・Bootstrapを知らないor使ってみたいと考えている
・Scaffoldを使ったことがある(無くても導入はできます)

#Bootstrapとは
CSSの「フレームワーク」
通常CSSを書く場合、全てのスタイルを自分で作っていく必要がありますが
このフレームワークにはよく使われるスタイルがあらかじめ定義してあるので
ルールに沿って利用するだけで整ったデザインのページを作成できます。
(引用:https://techacademy.jp/magazine/62

元記事を表示

コールバック(モデルの状態を自動的に制御)

イベントの前後に任意の処理を挟むことを**コールバック**と言う
主に、イベントの前(before)、イベントの後(after)、イベントを挟む(around)のタイミングで書くことができる。

※トランザクション
一連の複数の処理によるデータベースの整合性を保つための機能。
コーツバックの一つで例外が発生した場合、ロールバックと言う取り消し作業が発生し、その後のコールバックが実行されない仕組みになっている。

| コールバックの種類 | 使い道 |
|:—————–|:————————|
| before_validation | 検証前の値の正規化 |
| after_validation | 検証結果(エラーメッセージ)の加工 |
| before_save, before_create, before_update | saveのために裏側で行いたいデータ準備を行う|
| after_save, after_create, after_update | そのモデルの状態に応じてほかのモデルの状態をカエ

元記事を表示

Couldn’t find ModelName with ‘id’=batch_action

Rails 4.2.0
activeadmin (1.0.0.pre1)

active_adminで
タイトルのようなエラーが出ました。
# 解決方法

“`ruby:app/admin/model_name.rb
ActiveAdmin.register ModelName do
#これをかく
config.batch_actions = false
end
“`

元記事を表示

指定文字数の文字列出力 絶対値の出力

アウトプットの簡単な備忘録です。

絶対値
—————————————

“`
n = gets.to_i

puts n.abs
“`

入力値 -15

出力結果 15

文字列表示
—————————————
“`ruby:qiita.rb
n = gets.to_i – 1
s = gets.chomp

puts s.slice(0..n)
“`

入力値 4
aiueo
出力結果 aiue

2個目のスタートはどうしても0から取り出すっぽいので
入力した値-1が必要にななってしまいました。(文字数を0個出力って入力することは恐らくありませんから)
もっと良い取り出し方ないのだろうか

元記事を表示

letを使用することで、通るはずのテストが通らないFalse Alarmを生じる可能性がある

先日RSpecのテストコードにレビューを頂いたので、

なるべく多くを学びたいと思い、その内容を咀嚼する過程での気付きを書きたいと思います

元記事
[RSpecのEmail一意性テストで”Email has already been taken”問題と回避策 – Qiita](https://qiita.com/daddy_hacker/items/c84ae1b65831d5f7264d)

– なるべく小さいscope?(contextの中など)を見ただけでテストの内容が把握できるような書き方のほうが、読み手に理解しやすい、想定外の挙動を防ぐことができる。

– `let`を使って書くことはこれを実現するために有効

– `let`の遅延評価によって、テストによっては必要のないインスタンス変数を毎回`before`で定義するような冗長性を回避できる

が、この遅延評価を理解せずに、なんとなく変数代入の感覚で使用していたために以下のようなエラーに遭遇しました

# `let`を使用することで、通るはずのテストが通らないfalse Alarmを生じる可能性がある

##

元記事を表示

[Ruby]return,break,next それぞれの処理の終わらせ方

# 初めに

[paiza](https://paiza.jp/)で競プロみたいなことできるやん!!ってなってとりあえず朝の勉強初めはやる気出すために遊んでいるのですが。
その中でreturn等、処理を終わらせる記述の挙動についてわかってなかったな〜ってことがあったので書き留めておきます(正直まだ理解しきってはいない)

# 環境

Ruby 2.6.5

# 遭遇したこと

以下の様なコードを書いていました。(数値とかは問題の公表につながらない様書き換えています)

“`ruby:test.rb
array = [1,2,3]
ans = []

array.each do |a|
if a >= 1
ans << a return end end p ans ``` 簡略化した処理をしていますが、僕がやりたかったのは以下の様なことでした。 **配列の要素について条件を検証し、該当するものが見つかった時点でその値を空配列に入れ、繰り返し処理を終える** 上記のコードで言えば一番目の1の時点でifに該当しているので、ans = [1]となり処理が終わ

元記事を表示

rails console環境下でスクリプトを実行をする。

### 経緯
`rails console`環境下でbenchmarkを取りたい場面があった。`rails console`環境下で以下のように1行ずつ実行するのも手間で、ファイルのスクリプトを読み込む手法が個人的によかったので記録に残す。

“`
Loading development environment (Rails 6.0.3.2)
[1] pry(main)> require ‘benchmark’
=> false
[2] pry(main)> def benchmark(try_num:)
[2] pry(main)*
“`

### 手順

1、`rails console`コマンドをターミナル上で実行。

“`
$ rails c
Loading development environment (Rails 6.0.3.2)
[1] pry(main)>
“`

2、`load “[ファイル名]”`でファイルに記載されたスクリプトを読み込んで実行することができる。
スクリプトが実行されるので、ファイル内に定義した変数やメソッドをコンソール上で利

元記事を表示

Ruby on Rails から Open Distro for Elasticsearch に接続する

# この記事について

Ruby on Rails から Docker 上の Open Distro for Elasticsearch に接続する方法を記載します。

# Open Distro for Elasticsearch とは

[Open Distro for Elasticsearch](https://opendistro.github.io/for-elasticsearch/) は Elasticsearch のディストリビューションで、 [Amazon Elasticsearch Service](https://aws.amazon.com/jp/elasticsearch-service/) で使われているものです。

# Docker

[公式のドキュメント](https://opendistro.github.io/for-elasticsearch-docs/docs/install/docker/)を参考に docker-compose で Open Distro for Elasticsearch を立ち上げます。
今回はシングルノードで立ち上げて

元記事を表示

【初心者向け?】SQL超マスター〜複雑なテーブルにへこたれない編〜【Railsとの比較あり】

## はじめに
`Rails`を利用していると、普通に使っている分には`どんなSQLが発行されるんだろう?`ということを考えずとも、欲しいレコードが簡単に取得できますよね。`Rails`を学び始めた頃からすごいな〜と思っていましたが、今になってもやはり凄いなと思います。

ただ1つ、便利だからこそ生じる弊害があります。それは

>>>SQLが書けなくなる<<<

別に、「SQLが書けなくても`ActiveRecord`とかが頑張ってくれるから困らないじゃん」と思っている方もいらっしゃるかもしれません。私もそう思っていました。
しかし、例え`Rails`であっても、テーブル構造が複雑になってくると、`どんなSQLを発行したいのか?`という部分が分からないと、`Rails`でどう書いたらデータが取れるのか?というのが分からなくなります。

業務中に、そういった場面と直面する機会が最近格段に増え物凄く困った、危機感を持った、というのが私の体験談であり、結果として「やばい、SQL勉強し直そう」と思うきっかけとなりました。
なんとなくで `Rails` でレコードを取得している方は、この記事で一

元記事を表示

RailsでIPベースでBasic認証をかける

社内システムでかつ、外部公開をする場合に社内なら認証なし+社外からは認証かけたい場合のIPベースでの解決方法

## RailsでのBasic認証
https://api.rubyonrails.org/classes/ActionController/HttpAuthentication/Basic.html
まずは公式参照

ほぼこの内容なので、条件をローカルネットワークなら認証必要に変える。
ちなみにこの公式の内容だと通常のログイン認証と併用できたりする。管理者アクセスとかに使えるかも。

“` application_controller.rb
class ApplicationController < ActionController::Base protect_from_forgery with: :exception http_basic_authenticate_with name: "user", password: "pass" end ``` ## IPベースの判定 CIDRベースで指定したい。 `IPAddr`か`netaddr`でいけるみたい。今回

元記事を表示

parallel_tests が並列数を決定する仕組み

Rubyのテストは、素のままですと直列実行なので、テストケース数が増えると実行時間も増えていきます。

CIの実行環境は、マルチプロセッサを選択できることがあるため、テストも並列実行できると、時間短縮を狙うことができます。

Rubyでは parallel_tests というgem越しに、めぼしいテストフレームワークを並列実行することができます。

* https://github.com/grosser/parallel_tests

ところで `bin/parallel_test -n 4` のように並列数を指定すると4並列で動かしてくれますが、指定しなかった場合は、どうやら実行環境のプロセッサの数を、どこかから取ってきて動いているようです。README.md を眺めてもよくわからなかったので、ソースを読んでみました。

# 手元に持ってくる

この記事を書いてる時点の最新版 v3.1.0 を読んでみます。

* https://github.com/grosser/parallel_tests/releases/tag/v3.1.0
* https://github.com/gr

元記事を表示

renderメソッドとredirect_toの違い

**※この記事は私の勘違いが含まれています。正確な内容はコメント欄でご指摘頂いている通りです。**

 ツイッターのようなツイートアプリを作成中なのですが、表題の通りrenderとredirect_toの違いってなんや?
と思い私なりの結論が出たのでアウトプットのため、記事にしています。

#結論
– renderは同じコントローラー内のファイルしか基本読み込まないため、同じコントローラーのビューファイルを表示されることに向いている。
– redirect_toはurlを指定できるので、別のコントローラーのindexのビューファイルを表示させたい場合に向いている。

この結論に至った経緯は以下の通りです。
まずは以下のコードを見てください。

“`ruby:app/controllers/users_controller.rb
class UsersController < ApplicationController def edit end def update if current_user.update(user_params) redire

元記事を表示

マイグレーションファイルやテーブルの削除手順書

Railsを使い始めた頃に、マイグレーションファイルの扱いに苦戦していた時がありました。
手順や状態の確認もしないまま「いらないマイグレーションだから消してしまえ!」とか…

部分的なコマンドだけではなく、「実際の流れ」や「意図」を交えて書いていきます。
スクショも使ってあるので、見難かったらすみません…汗
`$` は入力しなくても大丈夫です!

# はじめにマイグレーションファイルの状態を確認します

プロジェクト内のターミナルで下記を実行

“`
$ rails db:migrate:status
“`
すると、現在実行されているマイグレーションファイルの状態が分かります。

※ 行いたい事:
一番下にある`Create text matelials`のマイグレーションファイルで作成したテーブルを削除してからマイグレーションファイルも削除したい時の説明です。

スクリーンショット 2020-07-27 20.49.05.pngアウトプット

# railsのアウトプット
## コントローラーのアクション
– index :一覧ページを表示をする
– new :新規投稿ページを表示する
– create :データ投稿を行う
– show :個別詳細ページを表示する
– edit : 編集ページを表示する
– update :データ編集を行う
– destroy :データを削除する

元記事を表示

Mysql2::Error::ConnectionErrorが出た場合

##localhost:3000で出たエラーを解決させました

自作アプリの開発中に起きたエラーを紹介します。

#環境
・macOS
・Rails 5.2.4.3
・Ruby 2.5.1

今日(投稿日)はエンゼルスの大谷投手が693日ぶりに登板と言う事で、めちゃくちゃテレビを見たい気持ちを抑えて、いつも通りの朝活を行う事に。。。

そして、自作アプリを開くとこんな画面に遭遇しました。
スクリーンショット 2020-07-27 7.32.29.png

へ?

何だこれは??

一瞬頭が真っ白になってしまいました。

なかなか自作アプリ開発が思う様に進まない中で、もはや自分でアプリを見ることすら出来ないのかと愕然。

5分くらい絶望した後に、取り敢えずエラーの解析から始めました。

#Can’t connect

元記事を表示

2020.7.27

“`ruby:qiita.rb
def greeting(&block)
puts “Hello”
block.call(“Goodbye”)
end

greeting do |text|
puts text
end

# ターミナル出力結果
# Hello
# Goodbye
“`

上記のコードの詳しい説明

“`ruby:qiita.rb
greeting do |text|
puts text
end
“`
まずは上記のコードが実行される。
上記のコードはgreetingというメソッドを実行し、その際に、下記のコードを引数としている。

“`ruby:qiita.rb
do |text|
puts text
end
“`
つまり、

“`ruby:qiita.rb

&block = do |text|
puts text
end
“`
となってる。
このとき、仮引数(今回はgreeting(&block)のblockのこと)に&(アンパサンド)を前置すると&blockとなり、これは「ブロック引数」となる。

元記事を表示

累乗、剰余の計算

ただの備忘録です。

累乗 3**2 3の2乗

剰余 7%3 2あまり1

関数使うなら n**s みたいな。

元記事を表示

OTHERカテゴリの最新記事