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

Ruby関連のことを調べてみた2022年02月23日
目次

外部キーのテストコードが上手くいかない

簡易的なフリマアプリを作成中。

単体テストコードにて、エラーが発生。
下記ターミナル内のエラー内容。

“`:ターミナル

Failures:

1) OrderDelivery 購入者情報の保存 内容に問題がある場合 userが紐ついていなければ購入できない
Failure/Error: expect(@order_delivery.errors.full_messages).to include( “” )
expected [] to include “”
# ./spec/models/order_delivery_spec.rb:81:in `block (4 levels) in

2) OrderDelivery 購入者情報の保存 内容に問題がある場合 itemが紐ついていなければ購入できない
Failure/Error: expect(@order_delivery.errors.full_messages).to include( “Item must exist” )

元記事を表示

RubyでGoogle Calendar APIを使えるようにするための設定

# はじめに

GoogleCalendarの情報を取得してRubyで何かプログラムを作りたいと思い、その時のGoogle側の設定が少しややこしかったので記録します。

# 前提

– Googleアカウントを持っている
– macOS
– Ruby 2.0以上が実行できる環境 ([公式ページより](https://developers.google.com/calendar/api/quickstart/ruby))

# 設定手順

大まかな流れは以下の通りです。

– GCPのコンソールを使えるようにする
– GCP内でプロジェクトを作成
– Google Calendar APIの有効化
– OAuth 同意画面の設定
– OAuth 2.0 クライアント IDの作成
– Ruby quickstart で動作確認

# GCPのコンソールを使えるようにする

以下画面にアクセスしてトップ画面を開きます。

https://console.cloud.google.com/getting-started

# GCP内でプロジェクトを作成

トップページの`プロジェクトの選

元記事を表示

Railsで使用しているDBの情報を取得する

# はじめに
`rails console` とかで今使っているDBの情報をパパッと表示したいと思って調べたら出てきたのでメモ代わりに書き出します。

# 結論
`connection_db_config` メソッドを使う(`connection_config` メソッドもあるが、こちらはRails 6.2で Deprecated となっている)

# 確認方法
ここではirbで確認してみる。

このようにDBの接続状況が `DatabaseConfigurations::HashConfig` オブジェクトで返ってくる。ちなみに `connection_config` メソッドでは `Hash` オブジェクトで返ってきていた。

“`ruby
irb(main):001:0> ActiveRecord::Base.connection_db_config
=>
#“sqlite3”

元記事を表示

【2022年2月】未経験から自社開発企業内定までの記録・感想

# はじめに

2021年6月より学習を開始・2022年2月頭から転職活動を開始し、三週間ほどで都内の自社開発企業様2社から内定を頂きました。
内定企業の技術スタックはRuby,Rails,Vue.js,Docker,CircleCiといったところです。

今後の未経験転職希望者の方々の参考になればと思い記録や感じたことを記事にします。

|見出し |概略|
|:|:|
|[自己紹介](#自己紹介)|学歴・職歴・資格
|[転職活動結果](#転職活動結果)|応募社数・使用媒体等
|[ポートフォリオ](#ポートフォリオ)|PFの内容・技術スタック等
|[学習記録](#学習記録)|総学習時間・PF作成の過程等
|[転職活動過程](#転職活動過程)|PF完成後に取り組んだ事等
|[面接内容](#面接内容)|面接で聞かれたこと・評価された事等
|[総評](#総評)|現在の未経験転職市場に対する個人的見解

# 自己紹介

年齢:25歳(社会人3年目)
出身大学: 慶應義塾大学法学部
現職:一部上場メーカーの営業
資格:TOEIC905点

プログラミング言語は昨年6月に初めて触りました。

#

元記事を表示

【Rails】ローカルサーバーを起動したときに、”A server is already running.”とエラーが出た時の解決方法

# 環境
– Ruby 2.6.6
– Rails 6.0.3

# エラー内容
Railsアプリのディレクトリ上でローカルサーバーを起動したところ、以下のようなエラーが発生し、アプリにアクセスできない状況になってしまった。
このエラーの内容は、サーバーはすでに実行されているというもの。

“`:ターミナル
$ rails s
=> Booting Puma
=> Rails 6.0.3 application starting in development
=> Run `rails server –help` for more startup options
A server is already running. Check /your_project_path/tmp/pids/server.pid.
Exiting
“`

# 原因、仮説
エラーが発生した原因は、ローカルサーバーを停止する前に誤ってターミナルを閉じてしまったことにありそう。
ターミナルを閉じた後もローカルサーバーが動いている状態になっているため、ローカルサーバーが動いているプロセスを終了させれば解決し

元記事を表示

AWSのLambdaのRubyでSQSを扱う

# 目的
AWS SQSのイベントハンドラーとしてAWS LambdaのRubyを使ってみます。タイムアウトなどでいくつかはまりポイントがありました。デプロイにはServerlessFrameworkを使っています。

# SQS

## キューのタイプ
### 標準キー
順番の保証が無く、配信も複数行われる可能性があります。1秒あたりトランザクション数は無制限

### fifo
順番の保証があり、配信は1つに制限されます。1秒あたりのトランザクション数は300

### 今回の選択
メッセージを重複処理されては困るのでfifoにしました。また本番で試したコードはDynamoDBと連携していたのでトランザクション数が制限されていた方がありがたかったです。

## 可視性タイムアウト
この時間を超えてしまうと、同じデータで別の処理が動いてしまいます。
デフォルトは30秒でこれはLambdaのタイムアウトと合わせる必要があります。もっと長くすることも可能です。最大12時間。

## メッセージ受信待機時間
デフォルト20秒(最大値)。SQSはポーリングすると課金されていきます。なるべく長

元記事を表示

【devise-token-auth x OmniAuth2.0 x SPA】でログイン機能を実装

ドキュメントがまとまっておらず非常に苦労したので、同じ実装をすぐできるようにまとめておく。今回は

1. ログイン用ボタンを押下
1. 新規タブでプロバイダーの認証画面に遷移
1. 認証が完了した後、コールバックにてユーザー登録
1. コールバックのウィンドウを閉じて、フロント側に認証情報を渡す

という流れの処理を実装する。

## gem
– [devise](https://github.com/heartcombo/devise):
Railsで認証を実装するためのgem
– [omniauth](https://github.com/omniauth/omniauth): マルチプロバイダー認証を行うためのgem
– [omniauth-rails-csrf-protection](https://github.com/cookpad/omniauth-rails_csrf_protection): [CVE-2015-9284](https://nvd.nist.gov/vuln/detail/CVE-2015-9284)の脆弱性に対処するためのgem。OmniAuth2.

元記事を表示

Rails migrationで使うデータ型の備忘録

#はじめに
ここ最近AWS(ECS)ばかり勉強していたため、久しぶりにRailsの勉強したのですが、マイグレーションの際のデータ型をすっかり忘れてしまったため、備忘録として残そうと思います。

#データ型の種類
データベースにデータを保存する場合、データの形式を理解しておく必要があります。
このようなデータ形式のことを、「データ型」といいます。
代表的なデータ型には、以下のようなものがあります。

型      内容
string     文字列(255文字まで)
text      長い文字列
integer    整数
bigint      整数
float      浮動小数
decimal     精度の高い小数
datetime    日時
timestamp   日時(Unixtime)
time      時間
date      日付
binary     バイナリデータ
boolean    真偽値(true or falseのように二択の際使われる)

#文字列の扱い
文字列を扱う際は選択肢として、「string」 と「text」があります。

string は

元記事を表示

module の include と extend

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# wrap (Python)
https://qiita.com/superrino130/items/500063867f069608854f

前回の記事(`module`と`class`間)でホッとしたのですが、`module`と`module`間ですと、`NoMethodError`になります。
# 失敗 (Ruby)
“`ruby
module M
def my_decorator(meth)
orig = method(meth)
define_singleton_method(meth) do |*args, **kwargs|
puts “Calling decorated method”
orig.call(*args, **kwargs)
end
end
end

module A
include M
module_function

def _example
puts “Called d

元記事を表示

[py2rb] wraps の2

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# wrap (Python)
https://qiita.com/superrino130/items/6e745547d398de82187c

以前の記事で、概ね`wrap`を表現できるようになりましたが、
`module`と`class`間ですと、`NoMethodError`になります。
# 失敗 (Ruby)
“`ruby
module M
def my_decorator(meth)
orig = method(meth)
define_method(meth) do |*args, **kwargs|
puts “Calling decorated method”
orig.call(*args, **kwargs)
end
end
end

class A
include M

def example
def _example
puts “Called decorated method

元記事を表示

Rails PagyでOverflowエラー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111652/f15d9091-6c98-17e2-e4f1-9a45a56be116.png)

# Pagyで次のページをクリックするとエラー
Railsでアプリケーションを作っている際にページネーションのGemにPagyを使っていました。
そこで次のページを表示させるために次のページへ移動するためにクリックすと
`Pagy::OverflowError`というエラーが発生しました。

[![Image from Gyazo](https://i.gyazo.com/8f2b1b42590ff5e15860483be3db73a6.png)](https://gyazo.com/8f2b1b42590ff5e15860483be3db73a6)

ほかのページでもPagyは使っていたんですが、そこではエラーは出ておらず
コードを見ても特にタイポとかはなさそうでした。

## 解決方法
PagyのGitHubPageにありました。

ht

元記事を表示

acts_as_listで rails db:migrate:reset すると undefined method `position’ エラー

## 困っていたこと
gemの[act_as_lists](https://github.com/brendon/acts_as_list)をアイテムの並び替えに使っていたところ、下記のようなエラーが発生してrails db:migrate:resetが妨げられる現象がローカル開発環境で多発していた。(一方、本番デプロイは成功していた。)

“`
$ rails db:migrate
== 20210406073220 CreateItems: migrating ===============================
— create_table(:items)
-> 0.0123s
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

undefined method `position’ for #
Did you mean? position=
“`

実装はこんな感じ。

元記事を表示

【個人開発】近くの二郎とサウナを一瞬で検索し、黄金ムーブがすぐできるアプリを作った

ロゴ – 9.png
「近くの二郎系とサウナ一緒に探したいなぁ〜」
「Google Mapは少し探しにくいんだよなぁ」

こんな悩みを解決するアプリ「ジロサウナ〜」を開発しました。

【サービスURL】
https://www.jirosauna.com/maps

はじめに

こんにちは、「二郎とサウナは万能薬」を信じる@botcher_matsuと申します。

言わずもがな、僕は、二郎系ラーメンをすすってからサウナで整うという所謂、「黄金ムーブ」が大好きなのです。

そして、二郎系ラーメンからサウナをキメるという合法麻薬(合法ですよね…?)にハマりすぎた僕の熱意はどんどん膨れ上がりました。

元記事を表示

<初心者>データベースに保存されません

今回も初心者エラーをやってしまいました。

NameErrorが解決できません。

Railsでアプリを実装中、
ここは完璧なんじゃないかってくらい久々な実感を湧いた状態で
エラーなんか起きないだろうと思っていました。

しかし、、、
NameError出てしまいました。

ターミナルも正常に動きパラメーターにもデータが入っている。
binding.pryで止めながらエラーを確認しても空。

なぜだ、、、
どこのネームが間違っていたんだ、、、

まったくわからず今回もパニックのまま何度もコードを見直していました。
すると、

直接コードを見たわけじゃなくちらっと頭に浮かんできた。

あれ、どこかの命名はアンダースコアってだめなんじゃね?

と思って、クラス名に目が止まりました。
すると、

“`
class Product_condition < ActiveHash::Base ``` む、なんか違和感がある。 確かスネークケースとかキャメルケースとか色々あった気がする。。。

クラス名、アッパーキャメルケースじゃないとダメな気がして

元記事を表示

RSpecの書き方2(before do)

# はじめに
今回はRSpec内でテスト前の事前処理をまとめたいときに使用するbefore doについてまとめます
そもそも使ったことがない、1から知りたい場合は下記の記事を合わせて参照してください

https://qiita.com/sekkenn1102/items/9f87748876bbb85f43ac

今回のテストは **「ログイン処理があるwebページでログイン後の処理(マイページ確認など)をテストする」** ことを想定して記載します
# 何も考えずにテストを書くと…
“`request_spec.rb
describe ‘マイページ確認’ do
context ‘ログインしている場合’ do
it ‘「ログインID」の項目があること’ do
post ‘/login_to_application’ params:{id: ‘test_user’, password:’password’} # ログイン処理
get ‘/mypage’
expect(response.body).to include ‘ログインID:’

元記事を表示

ruby のキーワード引数について

##はじめに
Rubyのキーワード引数は、ハッシュだと思って使っていましたが、どうやらそうじゃなさそうだったので、改めて調べてみました。
また、調べてみたところ、バージョンによって挙動が違いましたので、そのことについても記載します。
###検証バージョン
3.0.1

##キーワード引数とは
>キーワード引数とは、引数にキーワードを付けて、順序に関係なく対応する引数を決定する記述方法である。
キーワード引数を使うことで、何を意味するものか分かりやすく、引数に指定する順序を考慮する必要がなくなるメリットがある。

引用[Rubyのキーワード引数](https://tokitsubaki.com/ruby-keyword-arguments/531/)

###通常の引数を使用
次のプログラムでは、3つの仮引数を受け取るメソッドを定義して、呼出し時に3つの実引数を指定しています。

~~~ruby
def greet(first_name, last_name, age)
puts “#{first_name} #{last_name}、#{age}歳です。” # -> 山田 太

元記事を表示

【個人開発】全国の無料キャンプ場を検索し、欲しい情報を一目見て得られるようなサービス【CAMPHOOD】を作りました

## はじめに
みなさんキャンプはお好きですか?キャンプで焚き火を囲んでいるだけでも心が浄化されますよね。焚き火には「1/f ゆらぎ」と呼ばれる成分が含まれていて化学的にその癒し効果が証明されているそうです。焚き火をしながら「1/f ゆらぎ」の声を持つ宇多田ヒカルの曲を聴き、好きなビールでも飲めば大抵の嫌なことなんて忘れてしまいます。僕は焚き火をするのに無料キャンプ場をよく利用しています。コスパ最強の無料キャンプ場を多くの人に知ってもらいたいと思い、このサービスを作りました。

## サービス概要
CAMPHOOD -無料キャンプ場をもっと身近に利用しよう-
URL: https://www.camphood.net
![camphood-logo-yama.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1153603/384bdbad-122a-a683-ab77-678bcb2ba7c2.png)

キャンプに行く前はとにかく情報収集が大事です。僕はいつも下記のようなことをざっと調べていましたが、ま

元記事を表示

DM、チャットにおける通知機能

## 参考記事
1.[RailsでややこしいDM機能を1万字でくわしく解説してみた](https://qiita.com/bindingpry/items/6790c91f374acc25bea2)
2.[【Rails】通知機能を誰でも実装できるように解説する【いいね、コメント、フォロー】](https://qiita.com/nekojoker/items/80448944ec9aaae48d0a)
3. [[Rails] 同じmodelを参照する外部キーを一つのmodelでもつ方法
](https://qiita.com/takeoverjp/items/bb56d6a8eae191cd3732)

## 前提
・DM機能(テーブル設計に関しては参考記事1と全く同じ)
## Roadmap
・モデルの作成
・モデルのリレーション
・通知機能の作成
・モデルに切り出し
・読んだ際に既読になる機能の作成

## モデルの作成
“`
$ rails g model Notification
“`
“`migration_file.rb
class CreateNotificatio

元記事を表示

ActiveAdmin のメニュー設定をすごく便利にする ActiveAdmin::MenuTree のご紹介

ActiveAdminのメニュー設定を便利にする [ActiveAdmin::MenuTree](https://rubygems.org/gems/activeadmin-menu_tree) というgemを作ったのでご紹介します。

### ActiveAdminとは

https://activeadmin.info/

https://github.com/activeadmin/activeadmin

ActiveAdminとは、Railsで管理画面をさくっと作れるフレームワークですね。とても便利です。

元記事を表示

【Rails】繰り返し処理におけるインデックスについて

#each do 文におけるインデックス

“`hoge.html.erb
<% @hoges.each_with_index do |hoge, i| %>

元記事を表示

OTHERカテゴリの最新記事