- 1. ActiveAdminで、全てのチェックボックスを選択するチェックボックスを追加する
- 2. Rubyで多重配列に名前を付けてループを回す方法について
- 3. 【Rails】Rails始めて2週間でよく使ったコマンド
- 4. ActiveAdminで、多対多の関連付け(中間テーブル)レコードを追加する
- 5. 【paiza x Qiitaコラボ】「お菓子の詰め合わせ(ランクA相当)」を解いて解説入れてみた(なんちゃって全探索)
- 6. rswagでAPI仕様書自動生成するときにindexアクションの扱いに困った
- 7. Rubyプログラミング考え方{その7:カンマ区切りのN個のデータの入力 (paizaランク D 相当)}
- 8. Rubyプログラミング考え方{その7:カンマ区切りの3つのデータの入力 (paizaランク D 相当)}
- 9. Rubyプログラミング考え方{その6:N個のデータの入力 (paizaランク D 相当)}
- 10. Rubyプログラミング考え方{その5:3つのデータの入力 (paizaランク D 相当)}
- 11. Rubyプログラミング考え方{その4:N行のデータの入力 (paizaランク D 相当)}
- 12. ABC367 A~DをRubyで解く
- 13. RubyのREPLとデバッグ:初心者から見たツールの進化と効率化
- 14. Rubyプログラミング考え方{その4:3行のデータの入力 (paizaランク D 相当)}
- 15. インスタンスやクラスにどういうメソッドがあるか調べる方法
- 16. 環境変数の導入方法
- 17. Rubyプログラミング考え方{その3:1行のデータの入力 (paizaランク D 相当)}
- 18. Rubyプログラミング考え方{その2:1つのデータの入力 (paizaランク D 相当)}
- 19. Rubyプログラミング考え方{その1:自己紹介 (paizaランク D 相当)}
- 20. BunとHotwire Turboのセットアップ | Railsアプリケーションの構築方法
ActiveAdminで、全てのチェックボックスを選択するチェックボックスを追加する
## 動機
[前回の記事](https://qiita.com/Erga-mion/items/5ba48dbeb10573dd70c2)では、ActiveAdminで、複数のレコードを関連づけるために、フォームにチェックボックスを追加していました。 その続きになります。そこに、選択できるレコードの数が膨大になることが考えられるので、それらを全て選択できるチェックボックスを追加して欲しい、という要望がありました。
ActiveAdminのドキュメント等を確認しましたが、そういった機能は用意されていないようですので、JavaScriptで実装することにしました。(もしありましたらご指摘お願いします:bow:)
## 動作環境
– ruby 3.2.2
– rails 7.0.8
– activeadmin 2.14.0## 実装
前回の記事のものと同じものになります。`User` の作成・更新ページに、複数の`Book` を選択できるチェックボックスを追加しています。
“`mermaid
erDiagram
User ||–o{ BookReservation : u
Rubyで多重配列に名前を付けてループを回す方法について
# はじめに
Rubyで多重配列を扱う際に、各要素に名前を付けてeachやmapで回す事ができます。# 環境
“`
❯ ruby -v
ruby 3.2.0 (2022-12-25 revision a528908271) [x86_64-darwin20]
“`# 多重配列の例
まず、以下のような多重配列を用意します。“`rb
data = [
[1, “Alice”, 30],
[2, “Bob”, 25],
[3, “Charlie”, 35]
]
“`この配列は、ID、名前、年齢の情報を持つ3つの要素から構成されています。
# 名前を付けてループを回す方法
多重配列の各要素に名前を付けてループを回すには、eachメソッドやmapメソッドでブロック引数に名前を付けて以下のように書きます。## eachの例
“`rb
data.each do |id, name, age|
puts “ID: #{id}, Name: #{name}, Age: #{age}”
【Rails】Rails始めて2週間でよく使ったコマンド
こんにちは!
今回はRailsを始めて2週間でよく使ったコマンドを紹介したいと思います。
最後まで読んでいただけると嬉しいです!# コマンド紹介
“` php
rails server
“`
説明: Railsアプリケーションをローカルで実行するためのコマンドです。http://localhost:3000でアプリケーションを確認できます。
“` php
rails generate scaffold [モデル名] [カラム名:型, …]
“`
説明: モデル、ビュー、コントローラなどの基本的なCRUD機能を一括で生成するコマンドです。開発初期によく使用します。
“` php
rails db:migrate
“`
説明: データベースのスキーマを最新の状態に更新するためのコマンドです。新しいマイグレーションファイルを適用します。
“` php
rails console
“`
説明: RailsアプリケーションのコンテキストでインタラクティブにRubyコードを実行できるコンソールです。モデルの操作やデバッグに便利です。
“` ph
ActiveAdminで、多対多の関連付け(中間テーブル)レコードを追加する
ActiveAdminで1対多や多対多の関係のあるモデルでは、`has_many` メソッドを使うことで、多のモデルをもう一方のモデルのフォームで追加・更新できるようにできます。(https://activeadmin.info/5-forms.html)
本記事では、その`has_many`を使う方法と、もう一つ別のアプローチで、多対多のモデルを関連づける中間テーブルのレコードを作成・更新できるようにします。
ここでは、以下のようなモデル構成での実装を示します。
`User`のページで、`Book`との中間テーブルである、複数の`BookReservation`を作成・更新・削除できるようにします。
“`mermaid
erDiagram
User ||–o{ BookReservation : user_id
BookReservation o{–|| Book : book_id
“`## 動作環境
– ruby 3.2.2
– rails 7.0.8
– activeadmin 2.14.0## has_manyを使用する場合
### 画面
– 「Add N
【paiza x Qiitaコラボ】「お菓子の詰め合わせ(ランクA相当)」を解いて解説入れてみた(なんちゃって全探索)
こんにちは、paizaランクAのtomosukeです。「paiza x Qiitaコラボ」投稿は2回目です。今回はランクA相当の問題にトライしました。
今回も、考え方を頑張ってかみ砕いて説明してみたいと思います。
コラボ企画へのリンクは[こちら](https://paiza.jp/pages/campaign/paiza-qiita)
# 今回のお題は「お菓子の詰め合わせ」
[問題文はこちら](https://paiza.jp/works/mondai/a_rank_skillcheck_archive/school_hiking)## 概要(筆者の脳内で変換されています)
![スクリーンショット 2024-08-18 22.28.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63377/39a7ce7a-35ce-be74-5b8c-eb0b091742d2.png)
↑ paizaからの引用お菓子を買うためにお小遣いをもらいます。いくつかのお菓子が売っていて、それを次の
rswagでAPI仕様書自動生成するときにindexアクションの扱いに困った
# 前提
[rswagの公式Doc](https://github.com/rswag/rswag?tab=readme-ov-file#getting-started)を見ながらAPI仕様書の自動作成に取り組んでいた時の話。
自動作成までの手順として、RSpecでAPIのテストを書いた後、ターミナルで`RAILS_ENV=test rake rswag:specs:swaggerize`を実行する。
すると、`swagger/v1/swagger.yaml` が自動で作成されて、`api-docs/index.html` にアクセスするとswaggerのAPIDocが確認できる。# うまく行ったこと
createアクションはドキュメント通りに以下のようなテストを作った。(ユーザーに関するAPI)
“`ruby: users_spec.rb
require ‘swagger_helper’RSpec.describe ‘api/v1/users’, type: :request do
path ‘/api/v1/users’ do
post(‘create
Rubyプログラミング考え方{その7:カンマ区切りのN個のデータの入力 (paizaランク D 相当)}
https://paiza.jp/works/mondai/stdin/stdin_comma_n
**ステップ1: 要件の分析**
– 最初の行で整数 `N` が与えられます。
– 次の行で `N` 個の文字列がカンマ区切りで1行で与えられます。
– これらの文字列を順に `N` 行で出力するプログラムを作成します。**ステップ2: 擬似コードの設計**
1. 最初の行で `N` を取得します。
2. 次の行でカンマ区切りの文字列を取得し、分割します。
3. 各文字列を順に出力します。**ステップ3: コメント付きRubyコードの作成**
“`ruby
# 1行目でNを取得
n = gets.to_i# 2行目でN個の文字列を取得し、カンマ区切りで分割する
strings = gets.chomp.split(“,”)# 各文字列を順に出力
strings.each do |str|
puts str
end
“`**ステップ4: コードの解説**
– **`N` の取得:** 最初に `gets.to_i` を使って、入力から整数 `N` を取得しま
Rubyプログラミング考え方{その7:カンマ区切りの3つのデータの入力 (paizaランク D 相当)}
https://paiza.jp/works/mondai/stdin/stdin_comma_3
**ステップ1: 要件の分析**
– 標準入力で3つの文字列がカンマ区切りで1行で与えられます。
– これらの文字列を順に3行で出力するプログラムを作成します。**ステップ2: 擬似コードの設計**
1. 標準入力から1行の文字列を取得します。
2. 取得した文字列をカンマで分割し、3つの文字列に分けます。
3. 各文字列を順に出力します。**ステップ3: コメント付きRubyコードの作成**
“`ruby
# 標準入力から1行の文字列を取得し、カンマで分割して3つの文字列に分ける
strings = gets.chomp.split(“,”)# 各文字列を順に出力する
strings.each do |str|
puts str
end
“`**ステップ4: コードの解説**
– **文字列の取得と分割:** `gets.chomp.split(“,”)` を使って、標準入力から取得した文字列をカンマで分割し、3つの文字列の配列にします。
– **出力:**
Rubyプログラミング考え方{その6:N個のデータの入力 (paizaランク D 相当)}
https://paiza.jp/works/mondai/stdin/stdin_n
**ステップ1: 要件の分析**
– 最初の行で整数 `N` が与えられます。
– 次の行で `N` 個の文字列が半角スペース区切りで与えられます。
– これらの文字列を順番に `N` 行で出力するプログラムを作成します。**ステップ2: 擬似コードの設計**
1. 標準入力から最初の行で整数 `N` を取得します。
2. 次の行で与えられた `N` 個の文字列を取得し、半角スペースで分割します。
3. 分割された各文字列を順に出力します。**ステップ3: コメント付きRubyコードの作成**
“`ruby
# 1行目でNを取得
n = gets.to_i# 2行目でN個の文字列を取得し、スペース区切りで配列にする
strings = gets.chomp.split(” “)# 各文字列を順に出力
strings.each do |str|
puts str
end
“`**ステップ4: コードの解説**
– **`N` の取得:** 最初に `gets.to_i`
Rubyプログラミング考え方{その5:3つのデータの入力 (paizaランク D 相当)}
https://paiza.jp/works/mondai/stdin/stdin_3
**ステップ1: 要件の分析**
– 標準入力で3つの文字列が1行で、半角スペース区切りで与えられます。
– それらの文字列を順に3行で出力するプログラムを作成します。**ステップ2: 擬似コードの設計**
1. 標準入力から1行の文字列を取得します。
2. 取得した文字列を半角スペースで分割し、3つの文字列に分けます。
3. それぞれの文字列を順に出力します。**ステップ3: コメント付きRubyコードの作成**
“`ruby
# 標準入力から1行の文字列を取得し、スペースで分割して3つの文字列に分ける
strings = gets.chomp.split(” “)# 各文字列を順に出力する
strings.each do |str|
puts str
end
“`**ステップ4: コードの解説**
– **文字列の取得と分割:** `gets.chomp.split(” “)` を使って、標準入力から取得した文字列を半角スペースで分割し、3つの文字列の配列にします。
Rubyプログラミング考え方{その4:N行のデータの入力 (paizaランク D 相当)}
https://paiza.jp/works/mondai/stdin/stdin_n_line
**ステップ1: 要件の分析**
– 標準入力で最初に整数 `N` が与えられます。
– 続く `N` 行には、文字列がそれぞれ与えられます。
– 与えられた文字列を順にそのまま `N` 行で出力するプログラムを作成します。**ステップ2: 擬似コードの設計**
1. 標準入力から最初の行で整数 `N` を取得します。
2. ループを使って `N` 回、標準入力から文字列を取得し、その都度出力します。**ステップ3: コメント付きRubyコードの作成**
“`ruby
# 1行目でNを取得
n = gets.to_i# N行の文字列を順に取得して出力
n.times do
line = gets.chomp
puts line
end
“`**ステップ4: コードの解説**
– **`N` の取得:** 最初に `gets.to_i` を使って、入力から整数 `N` を取得します。
– **ループ処理:** `n.times` ループを用いて、`N` 回標準
ABC367 A~DをRubyで解く
# 概要
Rubyの練習のために実装例を書いてみます:::note warn
問題の解説を目的とした記事ではありません
:::# A – Shout Everyday
– 問題: https://atcoder.jp/contests/abc367/tasks/abc367_a
– 提出: https://atcoder.jp/contests/abc367/submissions/56856137時刻としてありうるのは高々24通りなので、起きている時間をすべて試して問題ないです
“`ruby
# 入力を受け取る
A, B, C = gets.split.map(&:to_i)# 起きている時間についてループ
t = C
while t != B do
# 時刻Aで起きていたらYesを出力して終了
if t == A then
print “Yes”
exit
endt = (t + 1) % 24
end# Noを出力
print “No”
“`# B – Cut .0
– 問題: https://atcoder.j
RubyのREPLとデバッグ:初心者から見たツールの進化と効率化
> Rubyの初心者として、最近私はRubyのREPL(Read-Eval-Print Loop)ツールとデバッグ機能について深く探求しました。この過程は、Rubyへの理解を深めただけでなく、ツールの進化と開発効率の関係について考えさせられる機会となりました。
### RubyのREPLツール:IRBからPryへ
Ruby公式が提供するIRB(Interactive Ruby)は強力なREPLツールですが、コミュニティ主導の需要により、Pryのようなさらに高機能なツールが生まれました。Pryはコード探索、コンテキストナビゲーション、リアルタイム編集など、より高度な機能を提供しています。例えば、Pryを使用すると、クラスやメソッドの定義を簡単に確認できます:
“`ruby
[3] pry(main)> show-source Array#mapFrom: array.c (C Method):
Owner: Array
Visibility: public
Number of lines: 17static VALUE
rb_ary_map(VALUE ary)
{
Rubyプログラミング考え方{その4:3行のデータの入力 (paizaランク D 相当)}
https://paiza.jp/works/mondai/stdin/stdin_3_line
**ステップ1: 要件の分析**
– 標準入力で3行の文字列が与えられます。それぞれの文字列をそのまま3行で出力するプログラムを作成します。
– 各行の文字列は1文字以上100文字以下で、英小文字、大文字、数字、または半角スペースを含むことができます。**ステップ2: 擬似コードの設計**
1. 標準入力から3行の文字列を順番に取得します。
2. 取得した各文字列をそのまま出力します。**ステップ3: コメント付きRubyコードの作成**
“`ruby
# 1行目の文字列を取得
a = gets.chomp
# 2行目の文字列を取得
b = gets.chomp
# 3行目の文字列を取得
c = gets.chomp# 1行目の文字列を出力
puts a
# 2行目の文字列を出力
puts b
# 3行目の文字列を出力
puts c
“`**ステップ4: コードの解説**
– **標準入力の取得:** `gets.chomp`を使って、各行の入力を取得し、末尾の改行
インスタンスやクラスにどういうメソッドがあるか調べる方法
# はじめに
実務でrubyを書いているのですが、インスタンスやクラスにどういうメソッドがあるか調べる方法を調べてみました。
環境
“`
❯ ruby -v
ruby 3.2.0
“`# クラスにメソッドが定義されているか調べる
クラスオブジェクトに対してinstance_methodsメソッドを使うと調べられます。
さらにgrepを使って絞り込みました。instance_methodsメソッドの戻り値はarrayなのでgrepメソッドが使えます
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/grep.html“`rb
irb(main):017> Range.instance_methods.grep(/each/)
=>
[:each,
:each_cons,
:each_with_object,
:each_with_index,
:reverse_each,
:each_entry,
:each_slice]
“`## 用途
対象ク
環境変数の導入方法
# はじめに
現在友人依頼のアプリケーション作成中です
環境変数の導入方法毎度忘れてしまうので、メモしておきます!# 環境変数とは
OSが持つ変数のことです
APIの秘密鍵などGitHubにあげたくない情報を、情報漏洩を防ぐために利用されます
環境変数を管理することができるgem「dotenv-rails」を使用していきたいと思います# dotenv-railsを導入
Gemfileに追記する“`Gemfile.
:
gem ‘dotenv-rails’
“`
bundle installを実行し、envファイルを作成“`
$ bundle install
$ touch .env
“`# 環境変数の設定方法
設定したい環境変数をenvファイルに入力します
“`.env
ADMIN_EMAIL=”任意のemailを入力”
ADMIN_PASSWORD=”任意のパスワードを入力”
“`今回はseedファイルで環境変数を呼び出します
“`seeds.rb
# Admin データの作成
Admin.find_or_create_by!(em
Rubyプログラミング考え方{その3:1行のデータの入力 (paizaランク D 相当)}
https://paiza.jp/works/mondai/stdin/stdin_1_line
**ステップ1: 要件の分析**
– 標準入力で1行の文字列が与えられ、それをそのまま出力するプログラムを作成します。
– 入力文字列は1文字以上100文字以下で、英小文字、大文字、数字、または半角スペースを含むことができます。**ステップ2: 擬似コードの設計**
1. 標準入力から1行の文字列を取得します。
2. 取得した文字列をそのまま出力します。**ステップ3: コメント付きRubyコードの作成**
“`ruby
# 標準入力から1行の文字列を取得します
s = gets.chomp# 取得した文字列をそのまま出力します
puts s
“`**ステップ4: コードの解説**
– **標準入力の取得:** `gets.chomp`を使って、標準入力から文字列を取得し、末尾の改行を削除します。
– **出力:** `puts`を使用して、取得した文字列をそのまま出力します。このコードをRuby環境で実行すると、入力された文字列がそのまま1行で出力されます。
Rubyプログラミング考え方{その2:1つのデータの入力 (paizaランク D 相当)}
https://paiza.jp/works/mondai/stdin/stdin_1
**ステップ1: 要件の分析**
– 標準入力で与えられた1つの文字列を、そのまま1行で出力するプログラムを作成します。
– 入力文字列は、英小文字、大文字、数字からなる1文字以上100文字以下の文字列です。**ステップ2: 擬似コードの設計**
1. 標準入力から文字列を取得します。
2. 取得した文字列をそのまま出力します。**ステップ3: コメント付きRubyコードの作成**
“`ruby
# 標準入力から1行の文字列を取得します
s = gets.chomp# 取得した文字列をそのまま出力します
puts s
“`**ステップ4: コードの解説**
– **標準入力の取得:** `gets.chomp`を使って、標準入力から文字列を取得し、末尾の改行を取り除きます。
– **出力:** `puts`を使って、取得した文字列をそのまま出力します。このコードをRuby環境で実行すると、入力された文字列がそのまま1行で出力されます。
Rubyプログラミング考え方{その1:自己紹介 (paizaランク D 相当)}
https://paiza.jp/works/mondai/self_introduction/self_introduction__1
**ステップ1: 要件の分析**
自己紹介を行うRubyプログラムを作成します。このプログラムは次の3行を出力する必要があります。
1. あなたの名前
2. あなたが学びたいプログラミング言語
3. 意気込みや目標を示すメッセージ**ステップ2: 擬似コードの設計**
1. `name`、`language`、`hitokoto`という変数を定義します。
2. それぞれの変数に適切な値を代入します。
3. 指定されたフォーマットで出力を行います:
– 1行目: “name: 名前”
– 2行目: “language: 言語”
– 3行目: “hitokoto: 一言”**ステップ3: コメント付きRubyコードの作成**
“`ruby
# 変数に適切な値を設定します
name = “Cody” # ここにあなたのニックネームを入力してください
language = “Ruby” # ここに学びたいプログラミング言語
BunとHotwire Turboのセットアップ | Railsアプリケーションの構築方法
## 背景
今回のプロジェクトでは、Bun を使用してJavaScriptのビルドと管理を行っているため、Railsのデフォルト設定である Turbo の自動セットアップが行われませんでした。そのため、Hotwire の主要な機能である Turbo と Stimulus をBun環境に合わせて手動でセットアップする必要がありました。## turboとは
Turboは、ページの切り替えや部分的なページ更新を速く行えるツールで、Stimulusはボタンのクリックや入力など、動的なユーザーインターフェースを簡単に作るための軽量なフレームワークです。これらのツールを手動で設定することで、Bunの高速な処理能力とRailsの効率的な開発環境をうまく組み合わせ、よりスムーズで快適なウェブアプリケーションを構築することが可能になります。## 実装手順
では早速実装の手順を説明していきます。[前提条件]
・Bun がインストールされていること。
※Bunの設定では[RailsプロジェクトにおけるBunを使用したJS/CSSビルドのメリットと実装方法](https://qiita.com/s