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

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

【RSpec】createアクションに関するテスト(リクエストスペックでUserモデルとリレーションのあるデータが追加されるかをテストする)

# 前提
表を作成するアプリをRailsを使って作成しています。
作成した表は、作成者のみが閲覧・編集・削除できるようにしたいと思っています。

# やりたいこと
createアクションに関するリクエストスペックを書く。

# 書いたコード
“`ruby:spec/requests/tables_controller_spec.rb
describe”#create”do
context “as an authorized user” do
before do
@user = FactoryBot.create(:user)
end

it “adds a table” do
table_params = FactoryBot.attributes_for(:table)
sign_in @user
expect {
post tables_path, params: { table: table_params }
}.to change(@user.tables, :count)

元記事を表示

RailsのDateTime月の相対時間計算における、since関数と四則演算の結果の違いに注意

# 結論
**DateTime**におけるsince関数は現在の日付に **30日加算しているだけ** です。

例えば、1月31日の1か月後を求める場合以下のような違いがあります。
| 方法 | 結果 |
| —- | —- |
| .since(1.month) | **3月2日** |
| + 1.month | 2月28日 |
| next_month | 2月28日 |
| months_since | 2月28日 |

# 注意
これはDateTimeの場合だけです。Dateはすべて2月28日になります。

# プログラム例
“`ruby:irbの結果
# DateTimeクラスの場合はsince関数だけ結果が違います
a = DateTime.new(2022,1,31) # => Mon, 31 Jan 2022 00:00:00 +0000
a.since(1.months) # => Wed, 02 Mar 2022 10:29:06 +0000(!!!!!!!)
a + 1.months # => Mon

元記事を表示

FactoryBotをSeedで使う

# 結論
`require ‘factory_bot_rails’`をseedファイルの上部に記載することでFactoryBotが使えます。

“`ruby:seedファイル
# rquireが重要!!!わすれないで!!
require ‘factory_bot_rails’

# 例1:1個データを作る
FactoryBot.create(:parent, name: ‘親1’)
# 例2:いっぱいデータ作る
FactoryBot.create_list(:child, 5, name: ‘子’)
# 例3:戻り値を使って作ったデータを取得する & データをセットする
parent = FactoryBot.create(:parent, name: ‘親1’)
FactoryBot.create_list(:child, 5, name: ‘子’, parent: parent)
“`

# 事前準備
## Gem
Gemの`factory_bot_rails`が必要です。Gemfileに追記しましょう。

## Factory
上記例の場合、このような感じのFactoryが必

元記事を表示

【Rails】ランキング形式で投稿を表示する。(部分的にパーシャルの内容を変更)

# はじめに
投稿をランキング形式で表示する際に、テンプレートは流用しつつ、第1位、第2位、、、のような数字部分を変えていく動作を加える。

# 前提
下記は作成済み
ユーザーテーブル
マイクロポストテーブル
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |

# 基本
ただ投稿内容を繰り返し表示していくには、下記のコードでOK。
“`言語名:app/views/microposts/index.html.erb
<%= render @microposts %>
# => <%= @microposts.each do |micropost|%>
#     第○位
# <%= render partial: 'microposts/micropost', locals:

元記事を表示

【Ruby】GemをGitHubからインストールする方法

## Gemfileを使用する
`Gemfile`に以下のように記述します。
“`Gemfile:Gemfile
gem “Gem名”, git: “git@github.com:ユーザー名/リポジトリ名.git”
“`

`bundle install`します。
“`:ターミナル
$ bundle install
“`

`group`, `platform`, `require`オプションが使用できます。
リポジトリには`.gemspec`ファイルが含まれている必要があります。

## `gem install`する
以下のコマンドを実行することでインストールできます。
“`:ターミナル
$ gem install specific_install
$ gem specific_install -l ‘https://github.com/ユーザー名/リポジトリ名’
“`

元記事を表示

【Rails】本番環境(heroku)でうまく動作しない。(メールでの本人確認)【Action_mailer】

# はじめに
開発環境である程度アプリケーションを作り、それをいざ本番環境で作るとなったとき、エラーになりうまく動かなかった。そこでherokuで正常に動作できるよう改善していく。

# 前提
デプロイしたところから開始する。

| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |
| 4 | heroku | Heroku-20 |

# heroku の状況確認
herokuコマンドで原因を探る。
“`言語名:ターミナル
$ heroku logs
“`
▼エラーに対して、下記の記事を参考に解決していく。

https://qiita.com/kobayashimakoto/items/c7a96ea9f6cbc8d2da77

# 本番環境の設定
本番

元記事を表示

スクレイピング時、iframeやjavascriptのせいで要素が取得できなかった

スクレイピングツールはnokogiriを使います
## 問題
– 検証ツールでカーソルを合わせると要素が表示されるのに、その要素を指定して取得しようとすると失敗する

僕の場合、動画をダウンロードするためurlを取得しようとしたらこの問題に陥った
この記事ではmp4ファイルを取得するのがゴールとする
その過程でもう一つの問題

– javascriptで作られた要素が取得できない

こちらに関しては強引に解決したので、あまり参考にならないかもしれない

## 原因
取得したい要素がiframeタグに囲まれている
srcで指定したurlから読み込んでいるため、iframeタグ内の要素は取得できない

## 解決過程
iframeのsrcを取得し、そのurlを取得してその中身を取得します
“`
doc = Nokogiri::HTML5(URI.open(url))
iframe = “https:#{doc.at_css(“iframe”).attr(“src”)}”
“`
一旦iframeの中身を確認
index.htmlに保存
“`
file = “./index.html”

元記事を表示

文字を入力しているのにvalidationが反応してしまう時

# 概要
“`ruby:記事を書くきっかけ(model)
validates :content, presence: true, length: { in: 1..140 }
“`
というvalidationを書いた後、
なぜか文字を入力しているのにvalidationが反応したため
解決に至るまでの経緯を記そうと思います!

# 経緯
プログラミングスクールのツイートアプリケーション作成課題に取り組んでいる際、
以下のバリテーションを実装しました。

・投稿内容に対して1 ~ 140字以内の文字数であること

ところが、上記のバリテーションを実装し開発環境のViewで確認したところ
実装したvalidationを満たす内容でもvalidationが反応して
エラーメッセージが出てしまうという部分で詰まったため本記事を書くに至ります。

# 原因
controllerのcreateアクションの記述が足りなかったことです。
※viewのformでsubmitしたパラメータをコントローラーで受け取っていなかった

# 解決に至る経緯
上述したvalidationが反応してしまうケースは

元記事を表示

sansanの1dayインターンに参加

## はじめに
sansanが開催する、Railsを使ったサーバーサイドのオフライン1dayインターンに参加しました。

1dayとは思えないほど濃く充実したインターンでしたので、それを紹介していきます。

## タイムライン
10:30-10:45
参加学生、サポーターの方々の自己紹介

11:45~11:30
会社紹介、本インターンで使う技術説明

11:30~12:30
休憩

12:30~17:00
ワーク

17:00~19:00
振り返り、質問タイム

19:00~19:30
オフィスツアー

### 参加学生、サポーターの方々の自己紹介
普段オンラインのインターンで開発はしているものの、オフラインでのインターンは初めてですごく緊張していました(大阪在住なので東京に行く時点で気が張ってました、、)。

ですが、みなさん優しくフレンドリーに接してくれてすぐに打ち解けることができました。

やはりほとんどの学生が関東在住でしたが、なんと同じ大学の人もいて親近感湧きました!

社員の方々はとても爽やかで、女性の方々は全員美人でした!

### 会社紹介、本インターンで使う技術説明

元記事を表示

Ruby で Lambda 入門 (1)

## 概要

– Lambda と DynamoDB の勉強がしたい
– API Gateway を使わなくとも Lambda に HTTP エンドポイントを作成できるようになったらしいので使ってみたい

以上の状況だったのでちょっとそのあたりを触ってみました。
なおタイトルにもある通り、ランタイムは Ruby 2.7 を選択しています。
※選択肢の中では自分が Ruby に慣れているというだけです

## やったこと

1. コンソールから Lambda 関数を作成
2. コンソールから DynamoDB のテーブルを作成
3. ローカルの apache にファイルを置いて、そこから Lambda にリクエスト
4. 受け取ったデータを使って DynamoDB のアイテムを作成
5. コンソールから追加されたアイテムを確認

## 手順詳細

### コンソールから Lambda 関数を作成
![](https://i.gyazo.com/9212952e70415079a6b90341a1d24676.png)
![](https://i.gyazo.com/bbe861d6f1

元記事を表示

default_scopeを使わずにorderメソッドでオブジェクトの並び順を変更する

# はじめに
default_scopeについて調べていると、「default_scopeは使うな」「default_scopeは非推奨」というワードが目に入りました。
今回はdefault_scopeを使わずに、orderメソッドでオブジェクトを新しいものから古い順に並び替えます。

### default_scope
“`models/post.rb
class Post < ApplicationRecord belongs_to :user default_scope -> { order(created_at: :desc) }
validates :user_id, presence: true
end
“`

“`posts_controller.rb
def index
@posts = Post.all
end
“`

“`posts/index.html.haml
%ul
– @posts.each do |post|
%li
= post.title
= post.created_at
“`
新しい

元記事を表示

Rails6からRails7へのアップデート手順(Rails6.1.4.7→Rails7.0.3)

Rails6からRails7へのアップデートメモ
===================================

今更ですが、rails4からrails7までアップデートする必要があったため
[Rails4→Rails5](https://qiita.com/t_mapico/items/ddf423113225ac45b033)
[Rails5→Rails6](https://qiita.com/t_mapico/items/4865a33b03219c99abfd)
Rails6→Rails7
のアップデートで手順をまとめていきます。

ここではRails6→Rails7の手順を書いていきます。

## 事前準備

### testが通るようにしておく
testを通るようにしておくと、アップデート後に、どこがエラーになるのか確認しやすいです。
事前にtestが全て通るようにしておきましょう。

### Ruby Version
今回はRuby 2.7.5 で対応してます

## Railsをアップデート

### gemfileの修正

gemのrailsのバージョンを

元記事を表示

AtCoder ABC261 D の提出を集計して感じたところ + Ruby で解けず crystal で解いてみた

# はじめに
AtCoder さん、ありがとうございます。
# D – Flipping and Bonus
https://atcoder.jp/contests/abc261/tasks/abc261_d

いわゆるDP問題
# 提出の集計
コンテスト中(2022-07-23(土) 21:00 ~ 22:40)の延べ提出数(当社調べ)
||Python (3.8.2)|PyPy3 (7.3.0)|Ruby (2.7.1)|Crystal (0.33.0)|C++ (GCC 9.2.1)|
|:–:|–:|–:|–:|–:|–:|
|AC|4|565|12|7|2283|
|WA|59|**18**|11|**6**|**1006**|
|TLE|**150**|11|**27**|1|191|
|RE|26|3|2|0|110|
|CE|0|0|0|1|46|
|subtotal|239|597|52|15|3636|

`C++`や`PyPy`での提出数が多いのはそうなのですが、
不正解の内訳からしますと、`C++` `PyPy` `Crystal`はいかに`WA`を

元記事を表示

【Rails】コードレビューですぐに役立つTips集

レビューする時もされる時も、似たような箇所が指摘されてきたので、まとめてみました!
(リーダブルコードも買ったから、あとで読んで追記していきたい。)

## 【Tips1】 命名大丈夫?
https://qiita.com/jnchito/items/459d58ba652bf4763820

## 【Tips2】 説明的なコメント❌WHYに答えるコメント⭕️
https://qiita.com/jnchito/items/459d58ba652bf4763820

## 【Tips3】 エラーハンドリング足りてる?
– 関連質問
– そこのfindでnilが渡されても大丈夫?
– params[:hoge]がnilでも大丈夫?
– rescueしなくていいの?
– 対処法
– `return if hoge.nil? `などで、途中で返す
– `hoge&.id`を用いる
– [Railsアプリにおけるエラー処理の考え方](https://qiita.com/jnchito/items/3ef95ea144ed15df3637)

#

元記事を表示

【Ruby】mapで回す必要ある?

リファクタのメモです。
間違っていればご指摘お願いします!

# 背景
今回りファクタするコードが最終的に行いたいことは、過去の各商品の2つの値とある各商品の2つの値を比較です。
そのために、preivous_itemsを定義しています。
(元のコードを編集しているので、細かいところは、気にせずでお願いします。)
“`ruby
def check_sample
previous_items = items.map do |item|
next if item.quantity.zero?
[item.user_id, item.quantity]
end

new_items = new_sample.items.group(:user_id).count
# [[user_id,quantity],[2,4],[3,0]] == [[1,3],[2,4],[3,0]]
preivous_items == new_items
end
“`

# 元のコード
“`ruby
previous_items = items.map do |item

元記事を表示

Envek日本到着!Rubyエンジニアを空港迎えに

![iOS の画像 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462614/f93eaf03-aca6-123e-f434-5ab00955e4c3.jpeg)
(右側がEnvekさんで、左は[iAdramelk](https://github.com/iAdramelk]))

## 先週の水曜は関空行きました。

空港はコロナ前と比べると静かでしたが、今回はある方を迎えるために関空まで行ってました。

またいつか海外も行きたくなりました。
ヨーロッパのEurokoというRubyカンファレンスでも行こうかな。。。

### OSSやってます!

Evil MartiansのバックエンドエンジニアであるAndrey Novikov ([Envek](https://github.com/Envek)) が、日本のエンジニアリングチームを強化するために大阪にやってきました!

(Yabeda)[https://github.com/yabeda-rb/yabeda]や(after_commi

元記事を表示

CSSの基礎知識(日本地図)

こんにちは!!
ともです!!

今回はざっくり日本地図(地方別)をCSSで作成したので共有したいと思います!!:point_up:

![スクリーンショット (66).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738887/2d58071b-7451-4737-07b6-90c1a3bc2ade.png)

Step1:各自導入したいHTMLに以下を記入

“`ruby:_html.erb

元記事を表示

[Ruby] 配列の結合と展開

Rubyによる、配列を結合し展開する処理について調べていみました。
間違っていればご指摘お願いします!

# 元のコード
今回は下記のコードをリファクタして、ベンチマークを計測しながら比べていこうと思います。
計測方法は[こちらの記事](https://qiita.com/scivola/items/c5b2aeaf7d67a9ef310a)を参考に計測していきます。
“`ruby
def nomal(items)
name_array = []

items.each do |item|
name_array.push([item[:id], item[:name]])
end

name_array.flatten
end
“`

## 計測コード
“`ruby
require ‘benchmark’

n = 10
items = 100.times.flat_map do |i|
[id: i, name: “山田#{i}”]
end

Benchmark.bm(10) do |r|
r.report “no

元記事を表示

[Ruby] 配列の結合について

Rubyによる配列の結合処理について調べていみました。
間違っていればご指摘お願いします!

# 計測コード
“`
require ‘benchmark’

n = 10000
y = 10
hoge_array = Array.new(y, “hoge”)

Benchmark.bm(10) do |r|
r.report “flatten” do
n.times{ [hoge_array, hoge_array, “hoge”].flatten }
end

r.report “splat” do
n.times{ [*hoge_array, *hoge_array, “hoge”] }
end

r.report “+” do
n.times{ hoge_array + hoge_array + [“hoge”] }
end
end
“`

# ベンチマーク
“`
n = 10
y = 10
user system total real
flatten 0.000055 0.000

元記事を表示

間違えてmigrateした時の対処法について(初心者向け)

ポートフォリオ作成中に間違った`マイグレーションファイル`を`migrate`してしまった。
恐らく、今後も同じ様な失敗をすると考えられるため忘備録として記事にしました。

そもそも`モデル`、`マイグレーションファイル`、`マイグレーション`とは

__Model__ (名): _(服装品・自動車などの)…型、雛形_
__migration__ (名):_移住、転住、渡り、移住者群、移動する動物の群_
__migrate__ (動): _(…へ)移住する、定期的に(…に)移動する、渡る_
__マイグレーションファイル__:_データベースの更新処理を行う設計図のようなもの。これをmigrateすれば、SQLを書かなくてもデータベースにテーブルが設計できる。_

### つまり
– `モデル`は __主に__ データベースのデータのやり取りを行う`機能`を担っている。
– `マイグレーション`はSQLを書かなくてもデータベースの構造を操作できる`便利な機能`のこと。
– その操作して`反映する作業`を`migrate`といい。
– `マイグレーションファイル`は反映する内容が書い

元記事を表示

OTHERカテゴリの最新記事