- 1. activerecord.ja.ymlファイルの便利さ
- 2. Rubyの基本(データ構造 Part1)
- 3. 【マイグレーションファイル】削除の方法【rails】
- 4. Rspecでモックを使用してテストを書いてみた
- 5. || 論理演算子でこれを使う場合
- 6. [Ruby]solid原則をポケモンで考えてみる
- 7. 【RuboCop】Rubyを用いたプロダクト開発で役立つ、RuboCop 運用改善方法【レベル別】
- 8. Rubyの基本(制御構造 Part2、メソッド)
- 9. rails db:migrate マイグレーションの種類とエラー
- 10. 【Rails】Mailerのプレビュー機能が表示される流れ(プレビュー機能が動作する経緯)
- 11. 環境構築 Ruby Rails
- 12. RuboCop v1.60の変更点を見てみよう
- 13. Turbo Streamsを利用してモーダル画面表示と他の処理を同時に行った
- 14. strong parameter内で使うmerge以下について
- 15. 【Rails】画像の上に文字を中央揃えで表示する方法
- 16. Rubyの基本(制御構造)
- 17. 【Rails】ECサイトにおける新着商品の表示レイアウトの整え方
- 18. new_framework_defaults_x_xを更新しても、値が反映されないことがあるので注意
- 19. RailsにおけるRate Limitの実装ガイド
- 20. request テストで rpsec テスト用のパラメータを作成
activerecord.ja.ymlファイルの便利さ
## はじめに
Railsで簡単な掲示板サイトを作っていた時に、ページ(今回はプロフィール画面)のカラムが期待通りに表示されておらず、なかなか原因が分からなかった事がありました。
## 環境
ruby 3.14
rails 7.0.3.1
## 目次
事例
activerecord.ja.ymlファイル
別の方法
まとめ## 事例
Railsで簡単な掲示板サイトを作っていた時に、profileページが期待通りに表示されませんでした。![qiita1-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726578/8a8764e4-651a-7673-9c44-ea758a58d44d.png)
メールアドレスや氏名がちゃんと表示されているにも関わらず、アバターだけがAvatarと英語表記になってしまっています。
profiles/edit.html.erb
“`<%= form.label :last_name %>
<%= form.Rubyの基本(データ構造 Part1)
# 配列の作成
順序が重要なデータは配列で管理する。
「puts」ならば値を順番に表示、「p」ならばリテラル表現で表示される。
「length」や「size」で格納されている値の個数を調べることができる。
“`ruby:sample_01.rb
scores = [70, 90, 80]# 値を順番に表示(改行付き)
puts scores
=begin
70
90
80
=end# リテラル表現
p scores # [70, 90, 80]# length も size も使用可能
p scores.length # 3
p scores.size # 3
“`# 配列の操作
配列に対しては、値の挿入、配列同士の連結、値の削除ができる。
“`ruby:sample_02.rb
# 値の挿入
scores = [70, 90, 80]
scores << 85 p scores # [70, 90, 80, 85] # 配列同士の連結 more_scores = [40, 50] scores += more_scores p scores # [70, 90【マイグレーションファイル】削除の方法【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 eRspecでモックを使用してテストを書いてみた
## mocksを使用した経緯
テストしたいクラスが、S3バケットへの署名付きURLの発行やCSVの生成などのために複数のクラスとの依存関係にあり、単独でテストをする必要があったため使用しました。## 参考にした記事
https://qiita.com/k-o-u/items/e6f671a1fc0bf720932dhttps://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内で
“`rubydef 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_icase 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“`
関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた