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

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

ユーザー名の表示”#{@item.user.nickname}” 【備忘録】

下記の#や{}を使う意味が全く分からなかったので調べてみました。

“`app/views/items/show.html.erb
“#{@item.user.nickname}”
“`
### この記述でitemsテーブルのnicknameカラムの値を表示させている。
“#{@item.user.nickname}”の記述は、商品を出品したユーザーのニックネーム(nickname)を表示するためのもの。

文字列の中でインスタンス変数の値を埋め込む方法を使っている。
#{}の中にコードを入れると、その中のコードが評価され、文字列として展開される。

1.@item は、items_controller.rb の show アクションで取得した特定の Item レコード。
2.@item.user は、Item と関連付けられた User レコードを参照している。
 (belongs_to :user のアソシエーションがある場合)。
3.@item.user.nickname は、User モデルの nickname カラムの値、つまりユーザーのニックネーム。
4,”#{}”

元記事を表示

Rakeタスク...タスク(作業)の自動化について

# はじめに
この記事は、Ruby on rails 初心者が備忘録として作成したものです。なにか間違い等ありましたら、ご指摘よろしくお願いします。

# Rakeタスクとは?
– **Rubyコードでタスクとして作成し、必要なときに実行することができる**
 => Rake は Ruby のビルドツールで、タスク(作業)を自動化
– **この時に実行する処理内容がrakeタスク**
 =>`Rakefile`に定義
– **Rake タスクの用途**
 =>データベースの初期化や更新
   定期的なデータのクリーンアップや集計
   バッチ処理の実行
   テストの実行や自動化されたタスクの実行 等々…

`要するに、定期的なメール送信、古いデータのクリーニング(例:x日以上経ったログデータや不要なキャッシュを削除する処理)、記事等の自動公開が可能に。`

– **Rake と Whenever の連携**
Rakeタスクは単体では手動でコマンドを実行する必要がありますが、Wheneverを使うと、任意のタイミングで自動で実行できるようになる。
#

元記事を表示

【Ruby】Procとlambdaの違いまとめ

どうもこんにちは。

今回は、RubyGoldで出てきそうな`Proc`と`lambda`についてまとめました。

# `Proc`と`lambda`の比較表

もう先に比較表を載せておきます。

| 特徴 | lambda | Proc |
| — | — | — |
| 引数のチェック | 厳格にチェック。引数が不足または過剰だとエラー | 引数の数に寛容。足りない場合はnilを補完する |
| returnの動作 | lambda内でのみ終了し、呼び出し元に戻る | 呼び出し元全体からreturnする |
| 作成方法の違い | lambdaまたは->で定義 | Proc.newで定義 |

# `lambda`

## `lambda`の基本構文

`lambda`を使うことで、引数を受け取る無名関数を作成できます。以下は、`lambda`の一般的な構文です。

“`rb
my_lambda = lambda { |x, y| x + y }
“`

または、短縮形で->(ラムダリテラル)を使うこともできます。

“`rb
my_lambda = ->(x,

元記事を表示

Ruby on Railsの自分用覚書

## 1.コントローラ(Controllers)
ファイル場所:`app/controllers/`
ユーザーからのリクエストを受け取り、モデルやビューと連携する。
“`users_controller.rb
class UsersController < ApplicationController def index @users = User.all end def show @user = User.find(params[:id]) end end ``` ## 2.モデル(Models) ファイル場所:`app/models/` データベースとやり取りするためのクラス。ActiveRecordを使う。 ```user.rb class User < ApplicationRecord validates :name, presence: true end ``` ## 3.ビュー(Views) ファイル場所:`app/views/` HTMLやJSONなどの出力をする。コントローラから渡されたデータを使って表示。 ```app/vie

元記事を表示

【Ruby】メソッドとは

# はじめに
こんにちは、現在アメリカの大学に行って語学を学びながらソフトウェアエンジニアになるために独学で勉強しているものです。
本日はRubyを勉強しているとよく出てくる、メソッドについて整理していきます。
というのも、現在progate→ゼロから分かるRuby→たのしいRubyと段階を追って勉強しているのですが、メソッドを深堀したり自分の中での定義を確立する機会がありませんでした
改めて時間をとってメソッドについてまとめていきたいと思います。

# メソッド
メソッドは、オブジェクトに対して行える処理や動作を定義するものです。
Rubyではメソッドはオブジェクトの動作を記述し、オブジェクトに対して呼び出すことができます。
Rubyのメソッドは、基本的に「メソッド名と引数を受け取って、特定の処理を行い、結果を返すもの」として機能します。
また、メソッドは大きく3つの種類に分類されます。

* 関数メソッド
* インスタンスメソッド
* クラスメソッド

### 関数メソッド
Rubyでは、特定のクラスに属さないメソッドを定義することもできます。
これを関数メソッドと呼び、トップレベ

元記事を表示

Railsで`before_filter`が`before_action`に変更された理由と対処法

## はじめに

Rails 5以降で、`before_filter`が廃止され、`before_action`に変更されました。この変更により、古いコードをそのまま使おうとするとエラーが発生します。この記事では、この変更の理由と簡単な対処法を紹介します。

## 変更の理由

– **一貫性**: 他のフィルタ(`after_action`や`around_action`)と命名を統一するために変更されました。
– **直感的な名前**: `before_action`という名前の方が、アクションの前に実行するという意味が明確です。

## 対処法

`before_filter`を使用している場合、`before_action`に置き換えるだけです。

### 変更例

**変更前**:
“`ruby
before_filter :authenticate_user
“`

**変更後**:
“`ruby
before_action :authenticate_user
“`

このように、`before_filter`をすべて`before_action`に書き換えて

元記事を表示

【Rails】 scopeについて

# Railsにおけるscopeの定義方法

scopeは、よく使うクエリを簡単に定義し、再利用可能にするための機能です。この記事では、scopeの定義方法や使い方について、通常のメソッドとの違いを交えて説明します。また、scopeの使用に対する現場での考え方の違いについても触れます。

## scopeの基本構文

scopeは通常のメソッドと少し異なりますが、シンプルに定義できます。基本構文は以下の通りです。

“`ruby
scope :スコープ名, -> { 処理 }
“`
###### :スコープ名
scopeの名前を指定します。メソッドのように呼び出し時に使います。
###### -> { 処理 }
無名関数(ラムダ)を使って、処理内容を記述します。whereやorderなどのActiveRecordメソッドを組み込むことができます。

無名関数(ラムダ)の詳細については、こちらを参照してください。
https://qiita.com/Yaaaaa_meat/items/a7a5502b890ab4c5e181

以下の例では、価格が500円以下の本を取得するsc

元記事を表示

Rubyで`URI.escape`エラーを解決するパッチの紹介

## はじめに

Rubyを使用しているプロジェクトで、`URI.escape`メソッドを使っていないにもかかわらず、以下のエラーが発生しました。

“`
undefined method `escape’ for URI:Module
“`
###### escapeの使用箇所が見当たらないで、探すのは諦めてパッチを当てることにしました。
`URI.escape`はRuby 2.7以降で非推奨となり、Ruby 3.0で削除されています。そのため、古いコードや依存ライブラリが`URI.escape`に依存しているとエラーが発生することがあります。この記事では、`URI.escape`が使えない環境でこのエラーを解決するためにパッチを当てる方法を紹介します。

## 解決方法

以下のコードを使用して`URI.escape`メソッドを自前で定義することで、エラーを解決できます。このパッチは`config/initializers/functions_overrides.rb`に追加します。

### コード

“`ruby:config/initializers/functions

元記事を表示

Railsマイグレーションの基本:複数カラムの追加と注意点

こんにちは!社会人1年目の初心者エンジニアです。
最近、データベースのスキーマを変更するためにマイグレーションを利用することが多くなりました。
この記事では、テーブルに複数のカラムを追加する方法と、マイグレーションを実行する際の注意点について説明します。

# 1. change_table を使って複数カラムを追加する
新しいカラムを追加する際、change_tableメソッドを使うと、複数のカラムを一度にまとめて追加できます。以下は、employeesテーブルにphone_numberとdepartmentを追加するマイグレーションの例です。
“`
class AddColumnsToEmployees < ActiveRecord::Migration[6.0] def change change_table :employees do |t| t.string :phone_number, comment: '電話番号' t.string :department, comment: '部署名' end end end ``` #

元記事を表示

【Ruby】オブジェクトとインスタンス

# はじめに
こんにちは、現在アメリカの大学に行って語学を学びながらソフトウェアエンジニアになるために独学で勉強しているものです。
本日はRubyを勉強しているとよく出てくるオブジェクトとインスタンスについて整理していきます。
というのも現在たのしいRubyという書籍でRubyを勉強しているのですが、これらの単語が出てきて「あれ、これはどういう意味だ?」とごっちゃになっているために整理をするべく記事にしました。

# オブジェクトとは
これは以前のオブジェクト指向のところでも触れましたが、Rubyは「すべてがオブジェクト」であることが特徴です。
数値、文字列、配列、クラス自体も含め、すべてがオブジェクトとして扱われます。
オブジェクトとは、データ(状態)とそのデータに対する操作(メソッド)をまとめた存在です。
Rubyのオブジェクトは、それに応じたクラスのインスタンス(実体)です。例えば、1は`Integer`クラスのインスタンス※であり、”hello”は`String`クラスのインスタンスです。
“`ruby:instance1.rb
num = 1 # num は

元記事を表示

表示を新しい順にする【備忘録】

写真とか投稿とか普通に記述すると左上から右下にかけて古い順(記録順)に表示されるけど、順序を逆に、新しい順に表示したいとき。

orderメソッド(まずこれで順序を並び替える)
created_at: (データベースのカラム名、情報をいつ登録、保存したかが記録されているのでこれが基準になる日時情報(タイムスタンプ)。
:desc (「降順(Descending)」の略。降順は新しいものから古いものへという順序。新しく保存された商品から順に並べる、という意味になる。逆に、:asc(「昇順(Ascending)」)を使うと古いものから新しいものへ並ぶ。

実際の書き方は
“`
app/controllers/items_controller.rb
Item.all.order(created_at: :desc)
Item.order(created_at: :desc)
“`
両方とも同じ意味(allは省略できる)。orderメソッドは内部的にallも含んでいる。データベースの全レコードを対象に処理が行われるので、全てのデータを取得して並べ替えが行われてる。

元記事を表示

Rubyの`proc`と`lambda`についての学習記録

# Rubyの`proc`と`lambda`についての学習記録

Rubyの開発で役立つ`proc`と`lambda`について理解を深めるため、まずは基本となるブロックから学びました。この記事では、ブロック、`proc`、そして`lambda`の使い方や違いについて整理し、コード例を交えて説明します。

## ブロックとは

ブロックは、メソッドに渡す処理のまとまりを表します。以下の例では、`do…end`の間にある部分がブロックです。

“`ruby
users = [“太郎”, “花子”]
users.each do |user|
p “私の名前は” + user + “です”
end
“`
do…endの代わりに{ }を使うこともできます。
“`ruby
users = [“太郎”, “花子”]
users.each { |user| p “私の名前は” + user + “です” }
“`

ブロックをメソッドの引数として渡すことで、繰り返し処理などを効率よく書けるようになります。このブロックをオブジェクトとして再利用できるようにしたものが、procやlam

元記事を表示

fields_forとaccepts_nested_attributes_forでネストされたフォームを簡単に扱う方法と注意点

# はじめに
日々勉強中の駆け出しWebエンジニアです。最近のプロジェクトで多用している`fields_for`について学んだことをまとめようと思います。
Railsのフォームを作成する際に、ネストしたモデルを扱う場面で登場する`fields_for`の使い方で、フォームが表示されなくなったり、ストロングパラメータの設定で悩むことがあったので、これから学ぶ方の助けになれば幸いです。

# fields_forとは
`fields_for`は、Railsのフォームビルダーの一部であり、親モデルにネストされた子モデルに対するフォーム要素を作成するために使用されます。`form_with`などとは異なり、fields_forは親モデル内で関連する子モデルに対してのフォームを生成できます。

例えば、ある親モデル(Post)が子モデル(Comment)を持つ場合、投稿フォーム内にコメントフォームを作成することができます。これにより、1つのフォームでPostとCommentの両モデルを更新することができます。

基本的な使い方としては、form_withのブロック内でfields_forを使用し

元記事を表示

Ruby on Rails&EC2,RDS使いのエンジニアがLambda,APIGateWay,DynamoDBに挑む!!

# この記事の目的
rubyやPHPでの開発経験やAWSのEC2、RDSの知見を活かして、AWSのLambda,APIGateway,DynamoDBをざっくりと理解する(例ではRuby on Railsで解説)

# こんな方に読んでほしい
– RubyやPHPで開発を経験を積んでいるとインフラはAWSの「EC2,RDS」を使用するケースが多い
– 今回、初めてAWSの「Lambda,APIGateWay,DynamoDB」を活用する事になった
– まだエンジニアの経験が浅い為、新しい知識や技術を理解するまで時間がかかる

無駄な前置きはなしにして、結論から!

# 経験値はこう置き換る
– APIGateWay = Ruby on Railsで言う所のroute.rb
– Lambda = Ruby on Railsで言う所のController(〇〇controller.rb)
– DynamoDB = schema.rb

これだけだとちょっとざっくりしすぎているので、ちょっとだけ深堀りしてみます。

# ざっくり深堀
– APIGateWay = 読んで字のごとくAPI(

元記事を表示

ruby初心者の備忘録1〜素数判定ロジック〜

お疲れ様です。セキュリティエンジニアを目指している吉川です。
日々の備忘録を自分が後で見直せるように書いていきます。
ruby初心者なのでもし同じように初心者の方が見た時に知識を共有できるよう頑張って更新します。よろしくお願いいたします。

コードを書いてrubyを覚えていこうという試みです。

# 素数判定ロジック

素数判定メソッド
def prime?(number)
return false if number <= 1 (2..Math.sqrt(number)).each do |i| return false if number % i == 0 end true end テスト用の配列 numbers = [2, 3, 4, 7, 10, 13, 17, 18, 19] 各数字が素数かどうかを判定して表示 numbers.each do |num| if prime?(num) puts "#{num} is a prime number." else puts "#{num} is not a prime numb

元記事を表示

AIを使うルール

1,理解していないコードはそのままコピペしない。最初から最後まで理解していることが条件。
2,例えばActiveHash::Baseのモデルファイルで都道府県や年月日やジャンル等々、あまりに単調で長すぎて手入力が理不尽な場合はAIを使うのが有効。

上記は今のところのマイルールだが以後加筆修正予定。

先生の一人は、そもそもコードを書かせたらダメという。
自分の経験でも、1つのエラーで1日中悩んでカリキュラム繰り返し読んでたほうが今AIに頼り切り状態より勉強になっていた。

元記事を表示

bundle install 後にも「Could not find gem名」エラーが発生したため、それを自動解決するスクリプトの紹介

## Railsでの「Could not find gem名」エラーを自動解決するスクリプトの紹介

Railsアプリケーションを開発していると、`bundle install` 後に `Could not find gem名` というエラーが発生することがあります。このエラーが出るたびに個別のgemを手動でインストールするのは手間がかかるため、エラーを検出して自動でgemをインストールするスクリプトを作成しました。

### スクリプトの内容

以下のスクリプトは、Railsサーバーの起動を試み、`Could not find` エラーが発生した場合に不足しているgemを自動的にインストールするものです。

“`ruby
# start_rails_server.rb
def install_missing_gem(error_message)
gem_name_with_version = error_message.match(/Could not find (\S+) \(([\d.]+)\)/)
if gem_name_with_version
gem_n

元記事を表示

Railsバージョンアップ時にCompass gemの削除について

Railsのバージョンアップを行った際、**Compass gem**が原因でエラーが発生したため、該当のgemを削除した手順をまとめます。

### 背景
– Railsアプリのバージョンをアップデートしたところ、`File.exists?` に関するエラーが発生しました。
– エラーメッセージを確認すると、**Compass gem**が原因であることが判明しました。
– `File.exists?` は最新のRubyバージョンでは非推奨となり、代わりに `File.exist?` を使用する必要があります。
– Compass gemは現在メンテナンスされておらず、更新が期待できないため、削除を決断しました。

### 対応手順
以下の手順でCompass gemを削除しました。

1. **GemfileからCompassの記述を削除**
`Gemfile` から `compass` の記述を削除します。

“`
# Gemfile
– gem ‘compass’
“`

2. **`bundle install` の実行**

元記事を表示

Ruby 3.3 の RSpec 内の Capybara で ArgumentError が発生する問題の解決法

# 環境
| ミドルウェア | バージョン |
| — | :—: |
| Ruby | 3.3.5 |
| Rails | 6.1.7.9 |
| RSpec | 3.13.0 |
| Capybara | 3.40.0 |

Rails 以外は現時点(2024 年 10 月 23 日現在)では最新版の環境における情報です。

# 問題
Ruby 3.0.7 から Ruby 3.3.5 にアップデートしたあと RSpec を実行すると Capybara を使用している部分で ArgumentError が発生するようになりました。

“`ruby:foo_spec.rb
RSpec.describe ‘/foo’, type: :request do
context ‘foo’ do
let(:html) { Capybara.string response.body }

it “displays the flash message” do
expect(html).to have_css ‘.success’, text: ‘Fiel

元記事を表示

唯一のメンターであるAIに聞いた、gets.split.map(&:to_i)に関する解説

先生の解説
“`
# 1.入力を取得
input = gets.chomp # ユーザーからの入力を取得
# 2.空白で分割し、配列に変換
split_input = input.split
# 3.各要素を整数に変換
ns = split_input.map { |num| num.to_i }

# これで ns に整数の配列が格納される
“`

説明
1.入力の取得: gets.chomp で、ユーザーからの入力を取得し、末尾の改行を削除します。

2.分割: input.split によって、取得した文字列を空白で分割し、配列に変換します。例えば、入力が “2 3 5” であれば、split_input には [“2”, “3”, “5”] が格納されます。

3.整数への変換: map { |num| num.to_i } を使って、各文字列要素を整数に変換し、最終的に整数の配列 ns に格納します。

元記事を表示

OTHERカテゴリの最新記事