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

Rails関連のことを調べてみた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

元記事を表示

docker composeが起動できなくなった話。

##はじめに
docker compose upでMySQLのコンテナが急に起動しなくなった時のことと、その解決策について備忘録として投稿します。

##開発環境
docker [20.10.6]
ruby [2.7.3]
ruby on rails [6.1.4.1]
MySQL [8.0]

##事象について
railsアプリケーション開発中に、新たにモデルを追加したので、以下を実行。

~~~bash:terminal
docker compose down #コンテナを削除
⠿ Container rails_portfolio_web_1 Removed 0.2s
⠿ Container rails_portfolio_db_1 Removed

元記事を表示

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で見るまでもない時にドゾー。

元記事を表示

railsチュートリアル第八章 現在のユーザー

###現在のユーザー
今度はそのユーザーIDを別のページで取り出すことにしましょう。

####セッションに含まれる現在のユーザーを検索する
app/helpers/sessions_helper.rb

“`rb
module SessionsHelper

# 渡されたユーザーでログインする
def log_in(user)
session[:user_id] = user.id
#sessionメソッドで作成した一時cookiesは自動的に暗号化される
# ユーザーのブラウザ内の一時cookiesに暗号化済みのユーザーIDが自動で作成
end

# 現在ログイン中のユーザーを返す(いる場合)
def current_user
if session[:user_id]
# ログインしているユーザーが有効か?
# このどちらかの状態の場合、Cookieの有効期限をブラウザ終了時にしても、
# Chrome側の仕様でCookieを保持し続ける
@current_user ||= User.fi

元記事を表示

railsチュートリアル第八章 ログイン

##ログイン
Sessionsコントローラを生成した時点で既にセッション用ヘルパーモジュールも自動生成されています
Railsのセッション用ヘルパーはビューにも自動的に読み込まれます。
どのコントローラでも使えるようになります
実際にログイン中の状態での有効な値の送信をフォームで正しく扱えるようにします。
####ApplicationコントローラにSessionヘルパーモジュールを読み込む
app/controllers/application_controller.rb

“`rb
class ApplicationController < ActionController::Base include SessionsHelper end ``` ###log_inメソッド 事前定義済みのsessionメソッドを使って、単純なログインを行えるようにします sessionメソッドで作成された一時cookiesは、ブラウザを閉じた瞬間に有効期限が終了 ####log_inメソッド app/helpers/sessions_helper.rb ```rb module Sessi

元記事を表示

ターミナルとは何か!

#①.結論!

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

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

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

#②.コマンドライン

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

#③.GUI(Graphical User Interface)

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

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

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

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

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

元記事を表示

has_many関連作成時に使えるようになるメソッド

# has_many
モデルにこれを指定することで関連先のモデルのオブジェクトのCRUD処理を簡単にすることができる。その時に使うメソッドの挙動についてまとめる。

# colletion
関連先のオブジェクト(objects)を返す。

# collection << (object, …) collectionにオブジェクトを1つ以上追加でき、自動で外部キーが設定される。この操作は、親のオブジェクトが新しいレコードでない限り、**即座**にSQL update操作が発火され関連先オブジェクトのvalidationやcallbackも走る。 https://api.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html#method-i-3C-3C # collection.delete(object, …) 基本の動作としては、objectの外部キーをNULLに設定する。加えて、`dependent: :destroy`が指定されている場合、ActiveRecordを通して`destroy`が実

元記事を表示

【RSpec】モックを使用したテスト

##環境
Ruby 3.0.2
Rails 6.1.4.1

##モックを使ったテスト

“`spec.rb
describe ‘XXXXX:XXXX’ do
#モックを作成
let(:slack_client_mock) { double(‘slack client mock’) }
subject(:task) { Rake.application[‘XXXXX:XXXX’] }

before do
#chat_postMessageメソッドが呼ばれたらモックを返すように実装を書き換える
allow(::Slack::Web::Client).to receive(:new).and_return(slack_client_mock)
allow(slack_client_mock).to receive(:chat_postMessage).and_return(true)
end

it ‘モックのテスト’ do
expect(slack_client_mock.chat_postMessage).to eq(t

元記事を表示

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

おわり

元記事を表示

wheneverにおいてのcron設定

##環境
Ruby 3.0.2
Rails 6.1.4.1
Docker version 20.10.7
docker-compose version 1.29.2

##cronとは
多くのUNIX系OSで標準的に利用される常駐プログラム(デーモン)の一種で、利用者の設定したスケジュールに従って指定されたプログラムを定期的に起動してくれるもの。

https://e-words.jp/w/cron.html

##cronの設定

– wheneverをインストールしてあることを確認して下記の設定
– cronはコマンド“`’分 時 日 月 曜日’“`で設定
– 「月曜〜金曜の19時」に実行したい

“`config/schedule.rb

every ‘0 19 * * mon-fri’ do
rake ‘namespace名:task名’
end
“`

設定内容を確認

“`
% docker-compose exec app bundle exec whenever
“`

cronにデータを反映

“`
% docker-compose exec

元記事を表示

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

元記事を表示

【Docker 】app_1 | Could not find (gem.lock名) エラーの解決方法

# 概要

docker × railsでdokcker compose upした際に**「Could not find (gem.lock名)〜」**というエラーが発生した。
bundle install 時にgemのインストールが失敗しているとのこと。

別の人の環境では動いたので、記述は間違ってない。
dockerのvolumeを削除してみる。

# 環境
・MacOS Apple M1 バージョン11.4
・Docker 20.10.7
・Ruby 2.5.9
・Rails 5.2.6

# volumeとは
ボリュームとは、データを永続化できる場所のこと。
**「名前付きボリューム」**と**「匿名ボリューム」**があり、名前付きボリュームの場合は Docker ホスト内で名前解決できるため、アクセスしやすい。
匿名ボリュームは適当にハッシュ値が振られる。
他のプロセスからはさわれないので安全。基本はこれを使うのがよい。

## dockerのvolumeの中身を見る

“`
% docker volume ls
“`

“`
DRIVER VOLUME NAME

元記事を表示

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

[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);
});
}

元記事を表示

Railsで外部テーブルに条件をつけて数順で並び替える、外部テーブルにレコードがなくても表示する

## 前提
投稿の`Post`モデルと、投稿を評価する`Evaluation`モデルがあり、
`evaluations`テーブルには`posts`の外部キー`post_id`がある

`evaluation`には`status`というカラムがあり、enumで管理されており値は以下の通りである

“` models/evaluation.rb
enum status: {
bad: 0 ## 低評価
good: 1 ## 高評価
}
“`

また、`post`は会員と管理者どちらでも投稿することができる
管理者が投稿する場合には`post.admin_id`に自分のidを入れる

簡略化したschema情報は以下の通りである

“` schema.rb
create_table “posts”, options: “ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin”, force: :cascade do |t|
t.bigint “admin_id”
end

creat

元記事を表示

around_actionで引数ありのメソッドをlambdaで指定する

## 概要

`around_action`に引数を持つメソッドを指定する際に無限に詰まったので同じ状況で困っている人のために残しておく。(最終的に上司に助けていただいて解決した。)

指定方法だけ知りたい人は`解決`までジャンプしてもらえれば書いてある。

## 状況

なぜ詰まったかというと、まずrailsでAction Controllerのフィルターを使用する際に引数を持つメソッドを指定する場合、ブロックを渡す必要がある。下記のようにしないとエラーが出てしまう。

“`rb
class HogeController < ApplicationController # 引数なしの場合 before_action :fuga # 引数ありの場合 before_action -> { fuga(x, y) }
end
“`

`before_action`と`after_action`を使用する場合は上記の記述で問題ないけど、`around_action`を使用する場合は1つ問題が発生する。

Railsガイドを読むと下記のように記述がある。
>「around系」

元記事を表示

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

#①.結論!

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

という事です!

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

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

#②.Request Spec

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

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

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

#③.まとめ

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

という事ですね!

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

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

元記事を表示

rakeファイルをRSpecでテストする

##環境
Ruby 3.0.2
Rails 6.1.4.1

##設定

“`spec/rails_helper.rb

Dir[Rails.root.join(‘spec’, ‘support’, ‘**’, ‘*.rb’)].sort.each { |f| require f }

“`

“`spec/rake_helper.rb
require ‘rake’
require ‘rails_helper’

RSpec.configure do |config|
config.before(:suite) do
Rails.application.load_tasks
end

config.before(:each) do
Rake.application.tasks.each(&:reenable)
end
end
“`

spec下にファイルを作成し、いつものようにテストを書いていく。

“`spec/lib/tasks/XXXXX_spec.rb
require ‘rake_helper’

describe ‘XXX

元記事を表示

OTHERカテゴリの最新記事