Ruby関連のことを調べてみた

Ruby関連のことを調べてみた

【マイグレーションファイル】削除の方法【rails】

マイグレーションの削除で6時間ほどかかってしまったため今後の備忘録として。

DBeaver にテーブルが登録されないため
一度手動で消してしまったのが運の尽き。

VSコードのマイグレーションは難なく消去できたがDBeaver 内は外部キーがあったせいで削除できず。:skull:

しかし解決策として
・マイグレーションファイルの順序を変更
・NO FILEの解消
が解決策として有効だと学んだ

マイグレーションファイルの順序として
**メイン、親となるものが先にくることが判明**

例えば
“`ruby
class CreateOrders < ActiveRecord::Migration[7.0] def change create_table :orders do |t| t.references :item_id, null: false, foreign_key: true t.references :user_id, null: false, foreign_key: true t.timestamps e

元記事を表示

Rspecでモックを使用してテストを書いてみた

## mocksを使用した経緯
テストしたいクラスが、S3バケットへの署名付きURLの発行やCSVの生成などのために複数のクラスとの依存関係にあり、単独でテストをする必要があったため使用しました。

## 参考にした記事
https://qiita.com/k-o-u/items/e6f671a1fc0bf720932d

https://zenn.dev/sa2knight/articles/2388ecadc82b98

## mocksの基本について
ほぼほぼ上記の記事と同じ内容ではありますが、
“`hoge_spec.rb
let(:class_a) { instance_double(ClassA) }
“`
これでClassAのテストダブル(影武者)のclass_aが作成できます。
しかし、このままではこのclass_aはメソッドなどは何も持っていないので情報を付与する必要があります。

“`hoge_spec.rb
allow(ClassA).to receive(:new).and_return(class_a)
allow(class_a).to

元記事を表示

|| 論理演算子でこれを使う場合

“`ruby:
A || B
“`
の場合を考察

「||」はプログラミングでは**または**を意味する


“`ruby:
Aが真 || Bが偽
“`
の場合はAが真のため条件全体はtrue

“`ruby:
Aが偽 || Bが真
“`
こちらもBが真であるためtrueが返る

A,Bどちらも真の場合はもちろんtrue
A,Bどちらも偽の場合はもちろんfalse

このように「||」は右辺か左辺のどちらかが真であれば条件全体が**true**となる

元記事を表示

[Ruby]solid原則をポケモンで考えてみる

# はじめに
先日、チーム内で質問会を実施しました。私が担当したのは、「**SOLID原則について、それぞれの原則の考え方について解説して欲しい**」というものです。ポケモンでsolid原則を考えてみたので、それを紹介したいと思います。

## いいコードとは
solid原則について解説したいとありますが、その前になぜsolid原則が必要になってくるのか考える必要があると思います。まず前提として、日々コードを書くうえで下記のようなコードになるように意識する必要があります。
– 保守性が高い
– 無駄な部分がない
– 拡張しやすい

他にも色々あると思いますが、今回は省略します。どれも大切ですが、具体的にどうすれば上記の項目を意識してコードを書けるのか気になりますよね。そこでsolid原則が役に立ちます。
### そもそもsolid原則とは
ソフトウェアの拡張性や保守性を高めるためのもので、具体的には5個の原則の頭文字を取ってきたものです。
それぞれの原則を目次に乗っ取って**ざっくり**解説します。

S(Single Responsibility) 単一責任の原則
O (Open-C

元記事を表示

【RuboCop】Rubyを用いたプロダクト開発で役立つ、RuboCop 運用改善方法【レベル別】

# はじめに

この記事は、Ruby を用いたプロダクト開発において、どのように RuboCop の運用のレベルを上げていくといいか、そのアイデアをレベル別に紹介する記事です。RuboCop を導入したけど莫大な `.rubocop_todo.yml` が減らずに困っている方や、これから RuboCop を導入しようと考えている方の役に立てば幸いです。

# RuboCopとは

![rubo-logo-horizontal-white.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/06ff0014-23d3-6f23-3699-7db6662e5e20.png)

https://github.com/rubocop/rubocop

RuboCop とは、 Ruby のコードを解析して、よくない書き方をしている場合に警告してくれるツールです。

Ruby は自由度が高い言語なので、同じ内容のプログラム様々な書き方で記述可能です。ですが、チーム開発などで複数人で Ruby を使った開発を

元記事を表示

Rubyの基本(制御構造 Part2)

# for文による条件分岐(続き)
for文の中で処理を中断したり、次のループに移る処理を加えることができる。
“`ruby:sample_01.rb
money = 100
for year in 1..30
money *= 1.05
# 「money」の値が300を超えたら処理終了
break if money > 300
# 「money」の値が200未満の場合は次のループ分にスキップ
next if money < 200 puts "Year #{year}: #{money}" end ``` 以下に注意 break:反復処理全体を終了させる命令。 next:次の反復処理に移る命令。 # 三項演算子 Excelにおけるif文と似ており、構文としては、「条件 ? [trueの場合の処理] : [falseの場合の処理]」となる。 ```ruby:sample_02.rb score = gets.to_i result = score > 80 ? “A” : “B”
puts result
“`

# メソッドの実装
Rubyのメソッドでは最

元記事を表示

rails db:migrate マイグレーションの種類とエラー

“`ruby

rails db:migrate

“`
データーベースを作るの意味

“`ruby

rails db:rollback

“`
データーべースに作ったカラム(名前)などの追加や編集をしたい場合にロールバックをして1度戻す
その後再度rails db:migrate をする

そして今回のエラーですが
db>migrate内にあるactiverecord内で
“`ruby

def change
create_table :addresses do |t|
t.string :zip_code, null: false
t.references :region_of_shipping_origin_id, null: false
t.string :city, null: false
t.string :street_add

元記事を表示

【Rails】Mailerのプレビュー機能が表示される流れ(プレビュー機能が動作する経緯)

## Mailerのプレビュー機能が表示される流れ

Mailerを用いて、プレビュー機能(送信メールの確認画面を表示する機能)の処理の流れを理解に苦戦したため、自分用に備忘録として残しておきます。
※ざっくりとした流れだけですので、詳細については割愛してます。

私と同じ境遇の方の役に立てば幸いです。

## 環境
` gem ‘letter_opener_web’`導入済み。

### 1.プレビュークラスの定義
今回は、下記のプレビューファイルを定義しています。
“`Ruby:spec/mailers/previews/article_mailer_preview.rb
# Preview all emails at http://localhost:3000/rails/mailers/article_mailer
class ArticleMailerPreview < ActionMailer::Preview def report_summary ArticleMailer.report_summary end end ``` `ArticleMail

元記事を表示

環境構築 Ruby Rails

## はじめに
Railsを1年以上ぶりに触る過程でいろいろ気づきを得た
以前は勘違いしていた箇所や不要な処理もあったため書き直し

## 前提
HomebrewとxcodeのCommand Line Toolsはinstallされている前提とします。
まだの方は下記記事を参考にinstallしてください

https://brew.sh/ja/

https://qiita.com/SayCheeese/items/1b9db660917049bbad64

## rbenvのインストール
“`shell
# rbenvのinstall (ruby-buildも自動でインストールされる)
# ruby-build:「rbenvのプラグインとしてrbenv installコマンドを使用できるようにする」
1 brew install rbenv

# rbenvが正常にインストールできたか確認
2 rbenv -v

# rbenvでinstallされたRubyを実行するためのPATHを通す
3 echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘

元記事を表示

RuboCop v1.60の変更点を見てみよう

こんにちは!withサーバーチームの@10keiと申します。

先日、RuboCopのバージョン最新化を行いました。

2024年2月時点で最新マイナーバージョンである
[RuboCop v1.60(2024-01-15 リリース)](https://rubygems.org/gems/rubocop/versions/1.60.0)における変更点を確認しましたので
以下に詳細を書いていこうと思います🙆

## Allow –autocorrect with –display-only-fail-level-offenses.
RuboCopを実行する際、`-a/–autocorrect`と`–display-only-fail-level-offenses`のオプションを同時に指定することが許可されました。

ちなみに、[`–display-only-fail-level-offenses`](https://docs.rubocop.org/rubocop/usage/basic_usage.html#:~:text=%2D%2Ddisplay%2Donly%2Dfail

元記事を表示

Turbo Streamsを利用してモーダル画面表示と他の処理を同時に行った

## 今回実装した処理の流れ
フォーム送ると、①非同期のジョブ、②モーダルの表示、③ジョブ結果を描画するテーブルの表示、の3つの動作を同時に行う機能を実装しました。
この記事ではそのturboのでのモーダル表示部分のみを記録しています。

## 実装したもの
モーダル部分
“`index.html.erb

“`
これだけ。ここをturbo_streamによってパーシャルに書き出したものと置き換えることでモーダル画面を描画させる。

同じページのボタン部分
data: { turbo_stream: true }をつけるとコントローラーでturbo_streamのリクエストとして受け取ることが出来ます。
“`index.html.erb
<%= form_with url: hoge_path(@hoge), scope: :huga, data: { turbo: true } do |f| %>

“`

切り出したパーシャル。bootstrapのモーダルを使っています。
モーダル表示

元記事を表示

strong parameter内で使うmerge以下について

def purchase_record_params
params.require(:purchase_record).permit(:zip_code, :region_of_shipping_origin_id, :city, :street_address, :apartment_name, :tel)
end

というコード内においてどうやらmergeが必要だったことがわかった。

今回はmergeの使い方を考えてみます。

結論mergeとはハッシュとハッシュの結合ということが分かった。


tweet = { name: “たなか”, text: “test”, image: “test.jpeg” }
uid = { user_id: “1” }
tweet.merge(uid)
=> {:name=>”たなか”, :text=>”test”, :image=>”test.jpeg”, :user_id=>”1″}

元記事を表示

【Rails】画像の上に文字を中央揃えで表示する方法

# 概要
この記事では、Railsアプリケーションにおいて画像の上に文字を中央揃えで表示する方法を説明します。
実装方法の参考として残しておく形なので詳しい解説はあえてつけていません。

# 環境
**Rails**: 6.1.4
**Ruby**: 3.1.2
**Bootstrap**: 4.5

:::note warn
**注意**
Bootstrapが導入されている前提で進めますので、もし導入されていない場合は、Bootstrapを導入するか、その部分を自作のclassで置き換えるかして対応してください。
:::

# 結果
最初にコード実装後の結果を貼っておきます。
実装後に下記の画像のようになっていれば表示されていれば、問題ないと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524017/7c9784cd-155e-26d1-1364-31dea00348b8.png)

# 準備
`app/assets/images`配下に背景画像としたい画像を用意して

元記事を表示

Rubyの基本(制御構造)

# if文による条件分岐
下記の例の「sample②」のように、実行したい処理を前に、条件を後に書くことも可能。
簡単な条件の処理であれば②の方がよりシンプルに書くことができる。
“`ruby:sample_01.rb
score = gets.to_i

# sample①
if score >= 90
puts “A”
end

# sample②
puts “A” if score >= 90
“`

# case文による条件分岐
数値の条件は「>」などの記号だけでなく、「..」で指定することも可能。
“`ruby:sample_02.rb
score = gets.to_i

case score
when 90..100
puts “A”
when 70..89
puts “B”
else
puts “C”
end
“`
# for文による条件分岐
繰り返す回数が決まっている場合はfor文が使える。
forの後に書く変数(「i」でなくても良い)はスコープ内で使用できる。
“`ruby:sample_03.rb
# 「Hello」を3回表示
for

元記事を表示

【Rails】ECサイトにおける新着商品の表示レイアウトの整え方

# 概要
この記事では、Bootstrap導入済みのRailsアプリケーションにおいて、ECサイトのトップページに表示する新着商品のレイアウトの整え方について言及しています。

# 環境

**Rails**: 6.1.4
**Ruby**: 3.1.2
**Bootstrap**: 4.5

# 結果
結果として、下記の画像のような感じでレイアウトが整っていれば良いと思います。
今回は割と簡素にしているので、ここからさらにレイアウトを改善して行っていただければと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524017/347c343e-c1fc-44c4-837c-c00704f38442.png)

# 実装

この章では実装の流れについて説明をしていきます。

::: note warn
**注意**
`Contorller`の処理や`View`の処理で使っている変数等々は、適宜置き換えて実装いただくようにお願いいたします。
:::

## Controllerの

元記事を表示

new_framework_defaults_x_xを更新しても、値が反映されないことがあるので注意

Railsのアップデートの際に、新しいバージョンの config のデフォルト値を少しずつ反映させるときに `new_framework_defaults_x_x` を使うと思います。

今回、`config.load_defaults 6.1` へ上げる前に、`Rails.application.config.active_record.has_many_inversing = true`の設定をしても反映されないことがありました。

:::note
たまたま今回は has_many_inversing でハマりましたが、他の設定でも同様ですし、new_framework_defaults 以外の `config/initializers/*` での設定も同様に`Rails.application.config.xxx`の設定が反映されない可能性があるので記事にしてみました。
:::

## 結論

初期化時の読み込み順によっては、`config/initializers/*` のファイルの設定値が反映されないことがあるので、 その場合は`config/application.rb`

元記事を表示

RailsにおけるRate Limitの実装ガイド

# Rate Limitの概要
Rate Limitは、APIへのリクエスト数を制御するためのシステムです。
これは、APIを過剰に使用したり、悪意のある攻撃を防ぐために使用されます。
Rate Limitによって、一定期間内に許可されるリクエストの数が限定されることで、サーバーの過負荷を防ぎ、サービス品質を維持することができます。

## Rate Limitの利点
### サービスの過負荷防止
APIへの過剰なリクエストがサーバーのリソースを圧迫し、サービスが遅くなったり、最悪の場合はダウンしたりすることを防ぎます。
Rate Limitによって、予期せぬトラフィックの急増による障害からAPIを守ります。

### 悪意のある利用の防止
DDoS攻撃など、悪意のあるユーザーによる過剰なリクエストを防ぎます。
これにより、APIが安全に運用されることを確保します。

### 公平なリソースの利用
全てのユーザーに対して公平にAPIリソースへのアクセスを提供します。
一部のユーザーによる過剰なリクエストが他のユーザーの利用機会を奪うことを防ぎます。

### コスト管理
クラウドサービ

元記事を表示

request テストで rpsec テスト用のパラメータを作成

# attributes_for
attributes_for を用いることで、モデルに紐づくパラメータを簡単に作れる

“`rb
let(:valid_params) { attributes_for(:agent_scout_company) }
let(:valid_params) do
{
name: “株式会社ホゲ”,
name_kana: “カブシキガイシャホゲ”,
zipcode: “1057510”,
address: “東京都港区 東京”,
tel: “0312345670”,
url: “https://www.hoge.co.jp”,
license_number: “11-ユ-343453”
}
end

“`

元記事を表示

image_tagを使って画像遅延読み込み

## image_tagとは?
画像ファイルのリンクを作成できる。

https://railsdoc.com/page/image_tag

# 画像遅延読み込みとは?
jsなどのライブラリを用いて画像を非同期読み込みすること。
遅延読み込み用のjsは検索すれば出てくると思うのでダウンロードしておいてください。
ここでは遅延読み込みについて詳しくは触れないので各自調べていただければと思います。
https://technical-seo.jp/lazy-load-javascript-library/

# 画像遅延読み込みをimage_tagを使って実装する
第一引数に画像ファイルへのパスを指定し、第二引数以降にオプションやHTML属性を指定できる。
第一引数に遅延読み込み用のファイルパスを指定し、第二引数のdate-srcで実際の読み込む画像のファイルパスを記載する。
“`rb
<=% "遅延読み込み用の画像ファイルパス","date-src"=>“表示させたい画像のファイルパス”,altなど… %>
“`
第二引数にはハッシュの形でファイルパスを渡してあげてください。

元記事を表示

【個人開発】断捨離アプリ「steteco」を未経験者が開発しました(Rails7)

## はじめに
初めまして。この度、初めて断捨離アプリである個人アプリ「steteco」をリリースいたしました。
まだまだプログラミング学習中の未経験エンジニアであり、技術的な内容などは誤りを含む可能性があります。
そのため、おかしな記述などがあればコメント等で教えていただけたら幸いです!
## stetecoについて
今回のアプリは、不用品の整理をしている際に「もったいないから」「フリマアプリで売れるかもしれないから」と考えてしまい、捨てる決断ができない優柔不断な方向けの、断捨離を後押しするサービスです。

私は、部屋の整理をして不用品が出るたびに、「フリマアプリで売れるかも」と思い、結局物置部屋のものが増えるだけという悪循環を繰り返していました。
同様に優柔不断な性格で整理ができない人が多いと気づき、断捨離を後押ししてくれるツールがあれば便利なのではと考え、「steteco」を作成しました。
– 作成期間: 約3ヶ月
– URL:https://steteco-dansyari.com/
– GitHub:https://github.com/ayaikg/sort_unwante

元記事を表示

OTHERカテゴリの最新記事