Ruby関連のことを調べてみた2021年10月20日

Ruby関連のことを調べてみた2021年10月20日

Rspec VCRの使い方(stubされているかどうかの確認、動的なパラメータがある場合のcassetteのマッチング、動的にcassetteの内容を変更する)

# 概要
VCRを使ったことがなく、かなりハマってしまったので、自分用にメモ
インストール方法などは他に山ほど記事があるので、そちらを参照してください。

# 前提
– request spec
– APIのテストではなく、request specでテストしたいアクション内でAPIを呼び出しており、そのAPIをstubしたい

# stubされているかどうかの確認
他の方が書いてくださったものを拝借

spec_helper.rbに以下を記載

“`rb
VCR.configure do | c |

# ここから
[ “recordable”, “stubbed” ].each do | method |
c.after_http_request(“#{method}?”.to_sym) do | request, _response |
puts “- VCR – #{method} – [#{request.method}] #{request.parsed_uri}”
unless request.externally_stubbe

元記事を表示

ターミナル起動時に/Users/ユーザー名/.zshrc:1: command not found: rbenvと表示されるのを消しさる

ホームフォルダーの隠しファイル.zshrcを開く

 eval “$(rbenv init -)”
 export PATH=”/usr/local/opt/~

を全て消して上書き保存

私はこれで表示されなくなりました。

参考にした記事
https://teratail.com/questions/272063

元記事を表示

rails データの並び替えまとめ

orderの使い方がうろ覚えだったので忘備録

“`ruby:
User.all.order(id: “DESC”) # 最後から並べてくれます
User.all.order(:id) # 指定なしなら最初から並べてくれます
User.all.order(id: “DESC”).limit(3) #3件のみ表示します。多すぎる時に使うと良き。
“`
データを見やすくするGemを入れてない時は

“`ruby:Gemfile
gem ‘hirb’
gem ‘hirb-unicode’
“`
bundle installしやす

“`ruby:
$bundle install
“`
hirbを有効にしやす

“`ruby:
$rails c
irb(main):001:0> Hirb.enable
=> true
“`
見やすくなりましたね!mysqlで見るまでもない時にドゾー。

元記事を表示

Rubyでの繰り返し処理 injectの使い方

#繰り返し処理とは
ある条件などが満たしている間もしくはその範囲で、
繰り返したい処理がある時に使います。

例えばwhile,loop,for文などです。

#injectの使い方
injectは注入という意味です。
scoresの合計を繰り返し処理で出力させていきます。

“`rb
scores = [40,60,80,100,120]

sum=
scores.inject do |result,i|
result + i

end

puts sum

“`
scoresの合計を出します。
実行すると

“`
400
“`
になります。
処理の流れとしては、40+ 60で100になって100+80で180になってと
このような流れを繰り返します。

#処理の流れを理解するには
デバックでbinding.pryを挟みながらやると繰り返し処理の流れが把握できます。
resultとiを入力しながらcontinueで処理を進めていくとわかりやすいかと思います。

https://qiita.com/Hashimoto-Noriaki/items/df700dc8

元記事を表示

Ruby eachを1行で書きたい、pluckを使いたい

・eachを一行で書きたい

“`
Areas.each {|area| puts area}
“`

“`
@shops = Shops.where(closed: false).pluck(:area_id).uniq.sort

“`

・pluckの例

“`
<% areas.each do |area| %> <%# 県 %>
<% if @shops.include?(area.id) %>
<%= link_to "#{area.prefecture}", area_path(area.id), class: "dropdown-item" %>
<% else %>
<%= link_to "#{area.prefecture}", area_path(area.id), class: "dropdown-item disabled" %>
<% end %>
<% end %>

“`

元記事を表示

1周目 railsチュートリアル第8章

#目次
[1.前回](#1-前回)
[2.概要](#2-概要)
[3.内容](#2-内容)
[4.用語のまとめ](#3-用語のまとめ)
[5.感想](#4-感想)
[6.おわりに](#5-おわりに)

#1. 前回
前章を貼り付ける

#2. 概要
今章の概要を記載

#3. 内容

## 基本的なログイン機構
7章では新規ユーザー登録。本章ではログイン・ログアウト機能。
認証システム(Authentification System)を使う。
ログイン済みユーザー(current user)を扱うことを認可モデル(Authorizzation Model)

### セッション
HTTPはステートレス(Stateless)なプロトコル。
cookieはユーザーのブラウザに保存される小さなテキストデータ。
この章ではsessionメソッドを使い、一時セッションを作成する。
次章ではcookiesメソッドを使う。

セッションをRESTfulなりソースとしてモデリングできると、
ログインページではnewで新しいセッションを出力。
ログインするとcreateでセッションを実際に作成して保存。

元記事を表示

ターミナルとは何か!

#①.結論!

ターミナルは、PCに命令をすることができるツールです!

環境構築を実行するには[コマンドライン]というツールが必要となります!

Macにデフォルトでインストールされているコマンドラインがターミナルです!

#②.コマンドライン

コマンドライン (または コマンドラインインタフェース:CLI )とは、コンピュータに対してキーボードからコマンドという文字を打ち込んで操作を行うツールです!

#③.GUI(Graphical User Interface)

コマンドラインとは対照的に、グラフィックを用いて操作を行う仕組みを グラフィカルユーザインタフェース(GUI) といいます!

例えば、「マウスでファイルをダブルクリックして開く」という操作など、普段PCで行う操作のほとんどはGUIで行なっていることが多いようです!

GUI = グラフィックを使用して、コンピューターの操作を行う方法!直感的に操作できる!

例、マウスでアイコンをクリックして操作できる!

CLI = キーボードを使用してコンピューターの操作を行う方法!コンピューター側の反応も文字によって出力され

元記事を表示

Rubyでソートする方法

# Sortメソッドについてまとめます
Rubyを学習中にソートする機会があったので、備忘録として投稿します。

# ソートとは?
特定のルールに従ってデータを並べること。

## たとえば?
たとえば

– 数字を大きい(小さい)順に並べる
– 名前を五十音順に並べる
– Qiitaの記事を古い(新しい)順に並べる

などがあります。
学生時代の「背の順」や「出席番号順」といった懐かしいものもありますね。

# sortメソッド
配列の内容をソートするメソッド。
[Array#sort](https://docs.ruby-lang.org/ja/latest/method/Array/i/sort.html)のドキュメントによるとによると

>ブロックとともに呼び出された時には、要素同士の比較をブロックを用いて行います。ブロックに2つの要素を引数として与えて評価し、その結果で比較します。ブロックは <=> 演算子と同様に整数を返すことが期待されています。つまり、ブロックは第1引数が大きいなら正の整数、両者が等しいなら0、そして第1引数の方が小さいなら負の整数を返さなければいけません

元記事を表示

M1 Macでpod installでバスエラーをRossettaなしで回避

CocoaPodsをアップデートしたら`pod install`
`/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.4/lib/ffi/library.rb:275: [BUG] Bus Error`
とかでクラッシュするようになり。
調べるとRossetta使って回避!とかしてる~~残念な~~人達が多かったので、いや、ないわーと。

[Segmentation fault on M1 macOS Big Sur #864](https://github.com/ffi/ffi/issues/864)

`sudo gem install ffi — –enable-libffi-alloc`
で回避しました

終わり。

元記事を表示

VsCodeで@も含めて選択できるようにしたい。

#今回の目標
VsCodeで@も含めて選択できるようにしたい

#手順
vscode画面にて
①左上のファイル
②ユーザー設定
③赤丸をクリック
![b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539538/4288b640-a505-cdc3-8674-717614a835b3.png)

④設定setting.jsonに追記

“[ruby]”: {
“editor.wordSeparators”: “`~!$#%^&*()-=+[{]}\\|;:’\”,.<>/?”
},

おわり

元記事を表示

Rails5技術者認定ベーシック試験に落ちてきた!

 rails5ベーシック試験普通に落ちました。。やったこととか、この箇所がテストに出てきたなとか覚えている限りでメモします。
結果21/40 = 51%くらい? 
 合格まで、あと7問足りませんでした。

 ちなみにrails5の試験って模擬試験とか問題集なくて、仕方なくrails4ブロンズの模擬試験回してたんですけど、こちらで5回連続900点台とかとってもダメダメでした。
 rails4技術者認定ブロンズ模擬試験サイト:https://diver.diveintocode.jp/dive_into_exam

 テスト内容としては、これ分かる! というような基本的な部分も割と出ています。
 多分そういうところで得点を稼いでいます。
 分かったか怪しいところとしては

 ・actionやmodelやjobの先祖のどこが何を継承しているのか。
  (::Base付くんだっけ? とか正解はこちらhttps://railsguides.jp/upgrading_ruby_on_rails.html#rails-4-2%E3%81%8B%E3%82%89rails-5-0%E3%81%B8%[

元記事を表示

RubyもRailsもSQLも知らんC++erですがいきなり戦いを挑んでみた

## はじめに

これまでC++、JavaScirpt、C#、Rustなどなどいろいろな言語を触ってきましたが、Rubyはほとんど触る機会がありませんでした。
またデータベースも`SELECT`文というのがあるくらいの知識しか持っていませんでした。

ところでいろいろありお仕事で以下の新しい要素~~しかない~~に満ち溢れている領域への挑戦をすることになりました。

– Ruby
– Rails
– Active Record
– ActionView
– etc
– Rspec
– Factory Girl
– MySQL

無事にRailsチョットワカルになれたと思うのでそこで得た知見をまとめてみようかと思います。

## 環境構築

環境構築のはまりポイントもあったのですが職場の手順書が改善されてしまったので(いいことだけど)、書くモチベがないので割愛します。

## haml入門

“`haml
– content_for :main_pane do
= render ‘new’, :setting => @foo_setting
= r

元記事を表示

予約可能と予約不可で色分けをする

[1.はじめに](#1-はじめに)
[2.予約画面のイメージ](#2-予約画面のイメージ)
[3.実装](#3-実装)
[4.コード](#4-コード)
[5.おわりに](#5-おわりに)

#1. はじめに
予約可能と予約不可で処理を分けたいと考えましたが、思った通りに行かなかったのと、検索しても記事が少なかったのでまとめます。
前提として、sheetの座席はマスターデータとしてDBに保存してあります。
予約テーブル(Reservations)と、座席テーブル(Sheet)が関連づけられています
予約テーブルは座席テーブルにidをsheet_idとして保持します。

|Reservations| Sheet |
|:———–|————:|
| sheet_id | id |
|    ・ | row |
|    ・ |column |

#2. 予約画面のイメージ
予約できる場合はオレンジ、予約不可の場合は色を暗くして視覚的にわかりやすくしています。
今回は映画館がモデ

元記事を表示

railsでAjaxが上手く連動してくれない時の対処法の1つ

#railsとAjaxが上手く連動してくれない時の確認
現在railsでアプリケーションを作成していて非同期通信を導入しようとしていました。
ですが、何が原因なのか上手く動作する時としない時があり原因不明だったのですが、なんとか解決に導いてもらえたので整理しておくために記録します。

“`ruby:jsファイル
function post (){
const submit = document.getElementById(“submit”);
submit.addEventListener(“click”, () => {
const form = document.getElementById(“form”);
const formData = new FormData(form);
const XHR = new XMLHttpRequest();
XHR.open(“POST”, “/posts”, true);
XHR.responseType = “json”;
XHR.send(formData);
});
}

元記事を表示

コントローラーの単体テストコードの概念!

#①.結論!

コントローラーのテストは、あるアクションにリクエストを送ったとき、想定通りのレスポンスが生成されるかどうかを確かめる!

という事です!

記述の際は、「リクエストとレスポンス」に着目したテストコードを記述します!

この時に、RSpecの中でもRequest Specと呼ばれる手法を利用します!

#②.Request Spec

RSpecが提供している、コントローラーのテストコードを書くために特化した手法です!

RSpecの導入が完了していれば使用できます!

ちなみに、コントローラーのテストコードは、結合テストコードに記述する内容と、同じような責務を果たすことが多いです!

#③.まとめ

簡単にいうと、Request Specはコントローラーのテストコードを書くことに特化している手法であること!

という事ですね!

記述などは、、また改めて細かく書いて説明するようにします!

何か説明で間違っていたらご指導お願い致します(_ _)

元記事を表示

キーワード検索とタグ検索機能の両立

#前提
キーワード検索機能
GeekSalon教材7-1

タグ検索機能
https://qiita.com/MandoNarin/items/5a5610a40c66f77d6c10

以上を実装済み

#コード

“`posts_controller.rb
def index
@posts= Post.all
@tags = Tag.all
@posts = @posts.where(“body LIKE ? “,’%’ + params[:search] + ‘%’) if params[:search].present?
#もしタグ検索したら、post_idsにタグを持ったidをまとめてそのidで検索
if params[:tag_ids].present?
post_ids = []
params[:tag_ids].each do |key, value|
if value == “1”
Tag.find_by(name: key).posts.each do |p|
post_ids

元記事を表示

Migrationファイルを操作する

Ruby On RailsのMigrationファイルの操作についてまとめ。
すぐ忘れるので。

## Migration ファイルを追加
### モデル作成
“`ruby:ターミナル
# モデルを作成
rails g model User name:string introduction:string
“`
“`ruby:db/migrate/XXX_create_users.rb(XXXは作成日時)
class CreateUsers < ActiveRecord::Migration[6.1] def change create_table :users do |t| t.string :name t.string :introduction t.timestamps end end end ``` ```ruby:db/schema.rb ActiveRecord::Schema.define(version: 2021_07_15_224955) do create_table "users", forc

元記事を表示

Ruby on Railsで郵便番号から住所を自動入力する

## jp_prefectureとjpostalで住所自動入力を追加しました。
新規にデータを作成する際、住所を自動で入力できると楽だなと思い、使ってみました。
最初なので少しわたわたしたけど、思ったよりは簡単

## jQueryの導入
rails6は“jquery-rails“ではなく、yarnから導入する

“`ruby:ターミナル
yarn add jquery
“`
environment.jsに設定を追加

“`js:config/webpack/environment.js
const webpack = require(‘webpack’)
environment.plugins.prepend(‘Provide’,
new webpack.ProvidePlugin({
$: ‘jquery/src/jquery’,
jQuery: ‘jquery/src/jquery’
})
)
“`
jqueryをimportする

“`js:app/javascript/packs/application.js
import Rails f

元記事を表示

Mac上のRubyコードからクリップボードを操作する

Macで動くRubyスクリプトを書いていて、処理結果を直接クリップボードに格納したいケースがあった。(Rubyの処理結果をコピペしたかった)

macOSでは、`pbcopy`と呼ばれるクリップボード保存用システムコマンドが用意されていて、

“`shell-session
$ echo ‘piyo’ | pbcopy
“`

のように文字列をパイプでpbcopyに渡すことで、クリップボードに文字列を格納することができる。

一方Rubyスクリプトでは、バックスラッシュで囲まれたコードをシステムコマンドとして実行できる:

“`ruby
str = ‘piyopiyo’
`echo #{p str}`

=> “piyopiyo\n”
“`

これらをまとめると、Mac上のRubyコードからクリップボードを使うことができる:

“`ruby
str = ‘piyopiyo’
`echo #{p str} | pbcopy` # クリップボードにstrが入る
“`

元記事を表示

Progate Ruby on Rails5 IV ~ V 個人的ざっくりまとめ

# 投稿の編集

流れは、以下の通り。
①**編集したい投稿を取得**
②**その投稿のcontentの値を上書き**
③**データベースに保存**

“`terminal:ターミナル
$ rails console

> post = Post.find_by(id: 1) #①
> post.content = “Rails” #②
> post.save #③
“`

# フォームに初期値を設定

textareaタグで囲んだ部分を初期値として設定できる。

“`erb

“`

特定のアクションで、URLのidと同じidの投稿データをデータベースから取得し、そのcontentの値を初期値に設定したりできる。

“`rb:posts_controller.rb
def edit
@post = Post.find_by(id: params[:id])
end
“`
“`erb:posts/edit.html.erb