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

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

MiniMagick gemのバージョンを変更したら動かなくなった。そのため5.0.1から4.5.1へ修正する。

## はじめに
Railsのバージョンアップ中にて
プロジェクトで画像処理のためにMiniMagickを使用していて、特定のバージョンでエラーが発生しました。ここではエラー内容と、その解決のためにMiniMagickのバージョンを変更した方法について共有します。

## 発生したエラー
まず、コード内で以下のようなエラーが発生しました:

mogrify: unrecognized option `-run-command’ @ error/mogrify.c/MogrifyImageCommand/5941.

このエラーは、MiniMagickが`mogrify`コマンドで`-run-command`オプションを使用しようとしたときに発生しました。`-run-command`はサポートされていないオプションであるため、エラーが発生したと考えられます。

## 環境
– Ruby: 3.2.3
– MiniMagick: 5.0.1

## エラーの原因と対応
エラーメッセージから、バージョン互換性に問題がある可能性を疑いました。調査の結果、MiniMagickのバージョンを

元記事を表示

【Ruby】繰り返し文のまとめ

# はじめに
こんにちは、絶賛Ruby勉強中のものです。
本日はRubyで出てくる繰り返し文についえ簡単にまとめようと思い記事にしました。
繰り返すという点では同じですが、それぞれ違う用途で使われることが多くわからなくなってしまうことがあると思うので初心者向けではありますが見ていきたいと思います

# Rubyの繰り返し文
まずはRubyの繰り返し文はどんなものがあるのでしょうか
* times
* for
* while
* until
* each
* loop
`loop`は無限ループを作りたい時などに使用しますが、使用頻度がそこまで多くないようなのでその他の文について説明していきます。

## times
`times`は「○回繰り返す」と決まっている場合に便利な構文です。
例えば、5.timesとすると5回だけ処理を繰り返します。
“`ruby:times1.rb
5.times do |i|
puts i
end
# 0
# 1
# 2
# 3
# 4
“`
また、do … endの代わりに中括弧 { … }を使って以下のように短く記述することも可能です。

元記事を表示

Ruby method備忘録

よく忘れちゃうのでメモ。

# 配列関係
## インスタンス化
“`Ruby
list = [1, 2, 3] # 正統派プリミティブ表現
list = %w(吾輩は猫である 名前は萬田太郎) # 文字列。%W()だと”#{変数}”みたいなのも展開してくれる
list = Array.new(5) # 五枠の配列になる。中身はnil。
# 初期値を渡すときは第二引数に指定できるが、全要素が同じオブジェクトを参照するようになる。
# 細かく指定したいならブロックを渡そう。
“`

## 取得
“`Ruby
list[2, 3] # 2個目から3つ取り出す
list[2..3] # 2個目から3つ目まで
list[..3] # 最初から3つ目まで。負の数を指定したら最後から数えて、になる。
list.vatues_at(1, 3, 5) # 1つ目、3つ目、5つ目。
list.fetch(2, “ねえよ”) # 2つ目、なかったら”ねえよ”が返る。
list.sample(2) # 無作為に2つ選んで返す。
list.find(ifnone) { |item| item.odd? }

元記事を表示

Formオブジェクトについて 【備忘録】

この議題は沢山の人が書いていますが、理解の為に自分の言葉で説明したいと思います。

1つのフォームから複数テーブルにデータを送信したいとき、この`Formオブジェクト`を使う。
(ほとんどが1つのフォームから2つのテーブルのケース)

一緒にする他モデルがあるモデルファイルにformオブジェクトファイルを作る。
名前は1つにしたいそれぞれのモデル名をつなげたもの。例)memo_form.rb、address_order.rb
この中にバリデーションやsave機能を記述することでまとめて複数のテーブルに送信する事が出来る。

最初聞いた時、多対多の中間モデルみたいなものかな?と思いました。
(あれは複数のidを1つのレコードで管理するテーブルでしたね。)

元記事を表示

メッセージ機能の実装

この記事はプログラミング学習者がアプリ開発中に躓いた内容を備忘録として記事におこしたものです。内容に不備などあればご指摘頂けると助かります。

## 記事投稿の背景
Xのクローンサイトを制作している時にメッセージ機能の実装で色々と躓いたので、知識整理も兼ねて記事として残すことにしました。

## 実装時のER図
![スクリーンショット 2024-10-26 18.20.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508918/1445a2ae-a6b1-349f-f3dd-da9bc90e8845.png)
UserモデルとRoomモデルの間に二つの中間テーブルを作りました。
Roomモデルはチャットルーム(メッセージをやり取りする場所)となります。
※チャットルームについて以降はルームと表現します。

Entrieモデルの役割:どのユーザー(user_id)がどのルーム(room_id)に居るのかを保存する

Messageモデルの役割:どのユーザー(user_id)がどのルーム(room_

元記事を表示

【個人メモ】Ruby on Rails チュートリアル 第3章

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです
# 個人メモ
– コントローラの生成コマンド
rails g controller コントローラ名 アクション名
– マイグレーションの変更を元に戻す
rails db:rollback
– テスト駆動開発(TDD:
最初に「正しいコードがないと失敗するテスト」を書き、次に本編のコードを書いてそのテストがパスするようにする
– assertion(アサーション)
アクションをgetして正常に動作することを確認するテスト手法
– テストの実行
rails test
– provideメソッド
引数にてページのタイトルをviewごとに変更
– yeildメソッド
記述箇所に実際にタイトルが挿入される

元記事を表示

ActiveAdminでの`NoMethodError`解決: `undefined method ‘delete’ for :ok:Symbol`エラー

## はじめに
Railsで管理画面を実装している際に、以下のようなエラーに遭遇することがあります。

“`
NoMethodError at /admin/items
undefined method `delete’ for :ok:Symbol
“`

この記事では、このエラーの原因とその解決方法について詳しく解説します。

## エラーメッセージの詳細
エラーが発生するのは、`app/admin/item.rb`ファイルの以下の部分です。

“`ruby
column :name
column “ステータス” do |item|
if item.is_active
status_tag “アクティブ”, :ok
else
status_tag “非アクティブ”
end
end
“`

このコードで`status_tag`に渡している`:ok`が原因で、エラーが発生しています。

## エラーの原因
### `status_tag`の仕様
– `status_tag`メソッドの第2引数には、`class`オプションを含む文字列またはハッシュを

元記事を表示

Rails undefined method ‘keys’ for #

## はじめに
RailsアプリケーションでActiveAdminを使用している際に、次のようなエラーに遭遇することがあります。

“`
NoMethodError at /admin/columns/new
undefined method `keys’ for #
“`

この記事では、このエラーの原因と解決方法について説明します。

## エラー内容の詳細
このエラーは、`app/admin/column.rb`ファイル内でフォーム定義を行う際に発生します。具体的には、以下のコードが原因です。

“`ruby
f.semantic_errors *f.object.errors.keys
“`

`f.object.errors`が`ActiveModel::Errors`のインスタンスであるにもかかわらず、その中で`keys`メソッドが利用できないという問題が発生します。

## エラーの原因
### ActiveModel::Errorsの変更点
– Rails 6以前では、`ActiveModel::Errors`はハ

元記事を表示

debrideというRailsのGemを使ってコードのお掃除をした話。

# デッドコードがもたらす弊害

皆さんはこんな経験ありませんか?

:::note info
この処理どこで呼ばれてるんだろう→ちょっと調査→呼ばれてないんかい!
:::

:::note info
似ているメソッドがあるけどどっちを使えば良いんだ。このメソッド使っていいのかな?
:::

デッドコード(到達不能コード)は、存在しても決して実行されることのないコードを指します。

これらのコードがあると、使っていないとは分かっていても少し脳のメモリを割かれる感じがしますよね。
使っていないコードが残っているとファイルの行数が単純に増えて、ちょっと気も重くなります。

気分的な問題だけでなく、デッドコードを残しておくと、誤って呼び出されてしまってバグを引き起こしてしまうなど、残しておいて良いことはひとつもありません。

テストコードに関しても、使っていないメソッドをテストするのは時間の無駄ですよね。

# 不要なコードをお掃除しよう!
そこで私の所属していたチームではGemを使ってのリストアップをおこなってデッドコードのお掃除を進めました!

どんな感じで進めたかをざっくりとご紹介でき

元記事を表示

【個人メモ】Ruby on Rails チュートリアル 第2章

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです

# 個人メモ
– scaffordコマンド
データモデルに関するコードを自動生成する
rails generate scaffold リソース名 データモデルの属性
– データベースのマイグレート
rails db:migrate
– RailsにおけるMVC
 1. ブラウザから送られたリクエストはRailsのルーティング機構によりControllerのアクションに割り当てられる
 2. アクションの実行により、ModelとDBでデータのやり取りが行われる
 3. Controllerは取得したデータをViewへ渡し、生成されたhtmlファイルをブラウザへ返す
– RESTとは
REpresentational State Transfer
データベースとHTTPの操作に対応したCRUD機能を作成することでアプリケーションを実現する
– ユーザー用のリクエストをUsersコントローラーのアクションに割り当てを行うコード
resources :users
– テーブル同士の関連付け(ユーザ

元記事を表示

JSON gemのアップデートで「Wrong number of arguments (given 2, expected 1)」エラーを解決

### はじめに
Rubyを使用しているとき、以下のエラーに遭遇したことがあるかもしれません。

“`
Wrong number of arguments (given 2, expected 1)
“`

この記事では、エラーの原因とその解決方法について解説します。

### 症状
以下のようなエラーメッセージが表示されることがあります。

“`
Wrong number of arguments (given 2, expected 1)
“`

### 原因
このエラーは、`json` gemの特定のバージョンで、メソッドの引数の仕様が変更されたために発生します。Rubyや他のgemと互換性が取れなくなり、正しく動作しない場合があります。

### 解決方法
この問題を解決するには、`json` gemをアップデートして最新バージョンにすることです。

“`bash
# json gemを最新バージョンにアップデート
bundle update json
“`

または、`Gemfile`で明示的にバージョンを指定してから再インストールします。

“`ruby
ge

元記事を表示

CarrierWaveで「can’t resolve image into URL」エラーと解決方法

### はじめに
CarrierWaveで画像を表示しようとしたとき、以下のようなエラーに直面することがあります。

“`
can’t resolve image into URL (undefined method `to_model’ for #)
“`

この記事では、なぜこのエラーが発生するのか、そしてその解決方法について説明します。

### 症状
これまでは、以下のように `.url` を省略して画像を表示できていたのが、

“`erb
<%= image_tag @user.avatar %>
“`

アップデート後に上記のコードでエラーが発生するようになりました。

### 原因
CarrierWaveのアップローダーオブジェクトが直接URL文字列を返さなくなり、`.url` を使ってURLを取得することが必須になったためです。この動作変更により、CarrierWaveのオブジェクトそのものを `image_tag` で渡すと、URLを解決できなくなりました。

### 解決方法
以下のように、`.url

元記事を表示

ActiveRecordのスコープundifined methodになる問題  WhereChain オブジェクトと ActiveRecord::Relation の違い

### 症状
以下のようなコードがあったとします。

“`ruby
Column.published.order_latest.limit(3)
“`

このコードで使用されている `scope` メソッドは、以下のように定義されています。

“`ruby
scope :order_latest, -> { order(published_at: :desc, created_at: :desc) }
scope :published, -> (current_date = nil) {
current_date ||= Util::DatetimeUtil.get_instance.get_current_date_time
where { (is_published == true) & (published_at <= current_date) } } ``` 上記のコードを実行したときに、以下のようなエラーが発生します。 ``` undefined method 'order_latest' for #

元記事を表示

【個人メモ】Ruby on Rails チュートリアル 第1章

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです

# 個人メモ
– Ruby on Railsチュートリアルにおける開発環境
github codespacesのクラウドIDE
– バージョンの確認
ruby –version
rails -v
– rubyドキュメントをスキップする設定を.gemrcに追加
echo “gem: –no-document” >> ~/.gemrc
– バージョンを指定しrailsをインストール
gem install rails -v 7.0.4.3
– gemのバージョン指定方法
gem “capybara”, “>= 3.26”
gem “puma”, “~> 5.0”
>”>= 3.26″という記法では最新のgemを探してインストール
“~> 5.0″という記法ではバージョン5.1などの新しいマイナーバージョンがあればインストールされるが、バージョン6.0のようなメジャーバージョンアップはインストールされない ~>の方が安全度が高い
– gemのインストール
bundle i

元記事を表示

「あなたの実践している生産性向上の取り組みは何?」に @jnchito が答えてみた

## はじめに
弊社ソニックガーデンの社内勉強会で、「個々人が実践している生産性向上の取り組みをお互いに共有し合おう」という勉強会が開かれました。

ちゃんとした準備時間が取れず、勉強会の10分前ぐらいに「そりゃー」と思いついたものをバババッと書き出したのですが、いくつかみなさんの参考になるものもあるかもしれないので、こちらでもシェアしてみます。

簡単に取り入れられそうなライフハック的なテクニックからそうでないものまで、とりあえず僕が思いついた内容を雑多に書き出したので、よかったら参考にしてみてください!

## ググるキーワードが思いつかないときは生成AIに聞く
メソッドの仕様とかは「Ruby prepend」みたいなキーワードでググるのですが、「○○を△△する方法」みたいな問いはググっても意図したページを探し当てにくいです。

そういうときはChatGPTに雑な文章を放り込んでやり方を尋ねたりします。

ただし、ChatGPTの回答は間違いが含まれる可能性があるので、「その回答は間違ってるかもしれんぞ」と自分に言い聞かせるのが大事です。

完璧な答えを求めるより、「答えを見つける

元記事を表示

条件分岐 【備忘録】

##未ログイン者がURLで編集ページを直打ちされてもトップページへ戻る
##未出品者以外がURLで編集ページを直打ちされてもトップページへ戻る

この条件分岐がどうしてもわからなくて滅茶苦茶時間が掛かったので記録しておきます。

“`ruby:app/controllers/items_controller.rb
#該当箇所のみ
class ItemsController < ApplicationController before_action :authenticate_user!, only: [:edit, :update, :destroy] # 未ログインユーザーはログインページにリダイレクト before_action :set_item, only: [:edit, :update, :show] before_action :move_to_index, only: [:edit, :update, :destroy] def set_item @item = Item.find(params[:id]) end def

元記事を表示

更新メソッドについて (assign_attributes 、update )

# はじめに
この記事は、Ruby初心者が備忘録としてまとめたものです。間違い等ありましたらご指摘お願いします。
# assign_attributes 、updateメソッド
– `assign_attributes`を使用することで複数の属性を一度に設定することが可能になります。また、特定の属性のみを指定することができます。既存のオブジェクトの更新等に使用することができます。
しかし、DBには保存されないので、別途で`save`メソッドが必用になります。

“`
def update
@post = Post.find(params[:id])
@post.assign_attributes(body: post_params[:body])# => 属性をbodyのみ指定。titleなど他の属性は変更されません。

if @post.save
flash[:notice] = ‘更新されました’
redirect_to posts_path
else
render :edit
end
end

(中略)

元記事を表示

【Rails】furimaアプリ 商品削除機能 #1

# 実装概要
商品の情報を削除する機能を実装

### ルーティングの設定
“`ruby:config/routes.rb
resources :items
“`
今回で7つ目のアクションなので`only:~`以下は削除してまとめる

### destroyアクションをコントローラーに定義
“`ruby:app/controllers/items_controller.rb
before_action :authenticate_user!, only: [:new, :create, :edit, :update, :destroy]
before_action :set_item, only: [:edit, :show, :update, :destroy]
before_action :correct_user, only: [:edit, :update, :destroy]

# 中略

def destroy
@item.destroy
redirect_to root_path
end
“`

以上で実装完了
LGTMいただいたので次回は商品

元記事を表示

【Rails】furimaアプリ 商品情報編集機能 #1

# 実装概要
画像を含む商品の情報を編集する機能を実装

### ルーティングの設定
“`ruby:config/routes.rb
# 中略
resources :items, only: [:index, :new, :create, :show, :edit]
“`
### editアクションをコントローラーに定義
“`ruby:app/controllers/items_controller.rb
# 中略
def edit
@item = Item.find(params[:id])
end
“`
### editページの編集
`new.html.erb`ファイルと同様のコードを記述(コード内容は割愛)

### updateアクションのルーティングを設定
“`ruby:config/routes.rb
resources :items, only: [:index, :new, :create, :show, :edit, :update]
“`

### updateアクションをコントローラーに定義
“`ruby:app/controllers/item

元記事を表示

【Rails】furimaアプリ 商品詳細表示機能 #1

# 実装概要
– 商品詳細表示ページにて、商品の詳細情報を表示する

### ルーティングの設定
“`ruby:config/routes.rb
# 中略
resources :items, only: [:index, :new, :create, :show]
# 中略
“`

### showアクションをコントローラに定義
“`ruby:app/controllers/item_controller.rb
# 中略
def show
@items = Item.find(params[:id])
end
# 中略
“`

ここでmainブランチに`「ルーティングの設定」` `「showアクションをコントローラーに定義」`の2つをcommit&pushしてしまっていることに気づく

解決策を下記に記載していく

### 新しいブランチを作成
ターミナル
“`
% git checkout -b 商品詳細表示機能
“`

### 新しいブランチをプッシュ
ターミナル
“`
% git push -u origin 商品詳細表示機能
“`

### mainブラ

元記事を表示

OTHERカテゴリの最新記事