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

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

Railsでモデルのバリデーションを回避するためのhidden_fieldの使い方

# はじめに
ユーザー登録画面を作成する際、presence: trueバリデーションを設定しているフィールドがフォームに含まれていない場合、バリデーションエラーが発生します。今回は、モデルを変更したくないけど、登録機能だけは完成させるためにバリデーションエラーを回避するために、hidden_fieldを使う方法を紹介します。

# 問題
以下のように、presence: trueのバリデーションが設定されたモデルを使っているとします。

“`
class User < ApplicationRecord validates :username, :email, :password, :phone_number, :address, :gender, presence: true, on: :create validates :email, length: { maximum: 255 }, format: EMAIL_FORMAT, uniqueness: { case_sensitive: false }, allow_blank: true validates

元記事を表示

『リファクタリング:Rubyエディション』より、つい忘れてしまう書き方

## はじめに

『[リファクタリング:Rubyエディション](https://www.amazon.co.jp/dp/4048678841)』という本を読んでます。

業務でよく出てくる&すぐ使えるのについ自分が忘れてしまいがちな書き方を備忘録としてまとめます。

第6章と第9章で紹介されていた内容です。

## ループからコレクションクロージャメソッドへ

配列から特定の条件を満たす値を抽出する際は、`each`メソッドでループを回さず`select`や`reject`といったメソッドを使うことで、よりシンプルに記述できます。

いくつかのサンプルをまとめます。

### 配列から奇数だけを抽出する

#### before

“`ruby
irb(main):001> odd = []
=> []
irb(main):002> [1,2,3,4,5,6,7,8,9].each { |i| odd << i if i % 2 != 0 } => [1, 2, 3, 4, 5, 6, 7, 8, 9]
irb(main):003> odd
=> [1, 3, 5, 7,

元記事を表示

macOSでのrubyバージョンアップ備忘

# 経緯
bundlerバージョンアップ時に、rubyのバージョンの問題で失敗したことでrubyのバージョンアップを行おうとしたのですが、少しハマってしまったので備忘として手順を残しておこうと思います。

“`
% sudo gem update –system
Password:
Updating rubygems-update
Fetching rubygems-update-3.5.21.gem
ERROR: Error installing rubygems-update:
There are no versions of rubygems-update (= 3.5.21) compatible with your Ruby & RubyGems
rubygems-update requires Ruby version >= 3.0.0. The current ruby version is 2.6.10.210.
ERROR: While executing gem … (NoMethodError)
undefine

元記事を表示

【Rails】typeという名前のカラムがあるとエラーが出る

## はじめに
DBにtypeという名前のカラムがある時にエラーが出たので、その対応をまとめます。

## 問題
エラー文
“`ruby
ActiveRecord::SubclassNotFound (Invalid single-table inheritance type: xxx is not a subclass of yyy):
“`

## 解決方法
typeカラムの名前を変更することでも対応できますが、それが難しい場合は以下のようにすることで対応できます。
“`ruby
class User < ApplicationRecord self.inheritance_column = :_type_disabled # この行を追加 end ``` ## 参考 https://qiita.com/ryonext/items/1a813639ab2a2a00058e

元記事を表示

【Ruby】unlessは簡単な構文の時に使おう

# はじめに
本日はunlessの使い方について記事にしていこうと思います。
余談ですが、10月中にやっとGitやLinuxなどの勉強がひと段落しました(まだ基礎レベル)。今月からRubyの勉強を始めましたので、Rubyに関する記事が増えるかもしれません。では、さっそく本題に入りましょう。

# unlessとは
`unless`は、`if`の逆の条件を扱う構文です。具体的には「条件が`false`のときに実行する」ために使われます。
`if`は条件がtrueの場合に実行されるのに対し、`unless`は条件が`false`の場合に実行されます。
`unless`は読みやすさやコードの意図を明確にするために便利で、特にシンプルな否定条件に対して効果的です。
基本構文は以下の通りです。
“`ruby:unless1.rb
unless 条件式
# 条件が false の場合に実行されるコード
end
“`
もちろんif文と`!`を用いて同様に表すことができます。
“`ruby:if1.rb
if !条件式
# 条件が false の場合に実行されるコード
end
“`

元記事を表示

Rails7 リロードしないとフォームのsubmitボタンが反応しなかった話

お久しぶりです。9月にニートから業務委託に昇格し、将来はドローンパイロットになりたいとよくわからないことを思い始めている変人です。

今回は、業務委託中で起こった、`formをリロードしないと送信できない!Turbo.falseにしたい!(発狂)`事件についてお話しようと思います。

#### 現象
– 新規投稿・編集画面に遷移後、入力欄に記入はできる。
– `でも、submitボタンが効かない!!`
– rails consoleで保存はできている。
– ブラウザでリロードしたら、submitできる。

#### 原因
`

`のそれぞれの個数が合っておりませんでした(笑)「死にそうです、Turbo切りたいです」とほざいておきながら、divタグをまともに閉じれていませんでした(ポンコツ超えてアホですね笑)

大まかには下記のようになっていました。

“`ruby:_form.html.erb

<%= form_with model: @hamster, local: true do |f| %>

元記事を表示

【個人開発】ペットのぶさかわを投稿するアプリ「ぶさかわフォト」をリリースしました。

## はじめに
プログラミングスクール「RUNTEQ」を卒業し、Webエンジニアとして転職活動をしているにしかわです。
今回、「ぶさかわフォト」をリリースしました。
読みづらい箇所もあるかと存じますが、ぜひご覧いただけると幸いです。

## 開発した理由
ペットで可愛いといえば、小さくて目がクリクリしている、モフモフしているイメージが浮かびませんか?
確かに可愛いですが、別の可愛さもあります。
私は、22kgのピットブルを飼っており、世間での可愛いイメージとは正反対の犬を飼っていますが、可愛いシーンがたくさんあります。 それが「ぶさかわ」です。
この「ぶさかわ」を共有したく今回サービスを開発しました。

## どんなサービスか
[![Image from Gyazo](https://i.gyazo.com/8d39b43ae264f8ffb80ec5586e174be6.png)](https://gyazo.com/8d39b43ae264f8ffb80ec5586e174be6)

サービス [ぶさかわフォト](https://busakawa.com/)
Github [Git

元記事を表示

【初学者用】RailsにおけるSQLアンチパターンの解説と対応策

## はじめに
今までNext.jsやTypeScriptでフロントからバックまで触っていたのですが、Rails1年生となって開発に携わっている中で、遭遇する可能性のある主要なSQLアンチパターンとその解決方法をまとめました。

初めてRailsを通してDB設計をする方の参考になれば幸いです。

## 目次
1. [文字列連結によるSQLインジェクション](#1-文字列連結によるsqlインジェクション)
2. [N+1クエリ問題](#2-n1クエリ問題)
3. [大量データの一括読み込み](#3-大量データの一括読み込み)
4. [不適切なインデックス設計](#4-不適切なインデックス設計)
5. [過度の正規化](#5-過度の正規化)
6. [単一テーブル継承(STI)の過剰使用](#6-単一テーブル継承stiの過剰使用)
7. [貪欲なフェッチ](#7-貪欲なフェッチ)
8. [不要なカラムの取得](#8-不要なカラムの取得)

## 1. 文字列連結によるSQLインジェクション

### 問題点
ユーザー入力を直接SQLクエリに組み込むと、SQLインジェクション攻撃の危険性があり

元記事を表示

Ruby勉強メモ:Ruby の エイリアスメソッド一覧

## エイリアスメソッド一覧

| メソッド 1 | メソッド 2 | クラス | 説明 |
|—————————|—————————|———————-|—————————————————————————————-|
| **`map`** | **`collect`** | `Array`, `Enumerable`    | 各要素にブロックを適用し、結果の配列を返す(要素の変換)

元記事を表示

rails newコマンドでのエラー対処

# 背景

初めてローカル環境で、Rails アプリケーションをつくろうとして、“Rails new“ コマンドを叩いたらいきなり躓いたので、メモ。

OS:Windows
使用しているアプリケーション:VSCode

# 1. “’: No such file or directory

“` :出現したエラー
(略)“’: No such file or directory – git config init.defaultbranch (Errno::ENOENT)
“`
### 解決策

特定のファイル内に存在する「“ ` “」が、原因で発生していることが分かった。エラー文から、ファイルを特定できたため、当該ファイルの「“ ` “」をすべて「’」に変更した。

https://qiita.com/TK_WebSE/items/f0a9cbd6e2b3431694bc

# 2. invalid byte sequence in UTF-8

“` :出現したエラー
Failed to load C:/Users/ユーザー名/.gemrc, invalid

元記事を表示

環境構築で苦戦

# calender-app.setting
#### bash
“`
$ touch {docker-compose.yml,Dockerfile,Gemfile,Gemfile.lock,entrypoint.sh}
“`
#### Dockerfile
“`
# Rubyのバージョンを指定した公式イメージをベースに使用
FROM ruby:3.2.2

# 必要なパッケージのインストール
RUN apt-get update -qq \
&& apt-get install -y nodejs postgresql-client npm vim \
&& rm -rf /var/lib/apt/lists/* \
&& npm install –global yarn

# コンテナの作業ディレクトリを指定
RUN mkdir /myapp
WORKDIR /myapp

# ホストのGemfileとGemfile.lockをコンテナにコピー
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.l

元記事を表示

【Rails】rake taskの使い方

## rake taskとは?
実行したい処理を記述しておき、`rake task`コマンドを利用して実行できます。
複雑な処理をタスク化しておくことで、簡潔なコマンドで実行できるため便利です。

## rake taskの作成方法

以下のコマンドを実行して、taskファイルを生成します。
“`terminal
$ rails g task
“`

“`ruby

namespace :test_task do
desc ‘テストタスク’ # 実行したいタスクの説明
task :nothing do
end
end

“`

DBにデータを登録するなどの場合は、`:environment`と記述します。

“`ruby
namespace :insert_user do
desc ‘ユーザー登録タスク’
task aaa :environment do
User.create(name: ‘花子’, age: 18)
end
“`

## 参考文献

https://guides.rubyonrails.org/

元記事を表示

【Ruby】array.map(&:method)の記法の仕組みメモ

## 概要
`array.map { |a| a.method }` を `array.map(&:method)` と略記できるやつの仕組みを何度調べても忘れるのでメモ。
これに関する記事は他にも多くありますが、自分の中で咀嚼したつもりのものを書き残します。

## 本文
### 前提
`to_proc` を持つオブジェクトの頭に `&` をつけてメソッドの引数として渡すと、 `to_proc` が実行されProcオブジェクトとなり、メソッドにブロックとして渡される。

https://docs.ruby-lang.org/ja/latest/doc/spec=2fcall.html#block

また、Symbolクラスのインスタンスメソッド `to_proc` は、シンボルと同名のメソッドを呼び出し、第1引数をそのメソッドのレシーバとする。

https://docs.ruby-lang.org/ja/latest/class/Symbol.html#I_TO_PROC

### つまり

“`ruby
# これの &:upcase 部分は
[‘hoge’, ‘fuga’].m

元記事を表示

🐈画面上で猫が邪魔してくださる Rails gem を作って世界を平和にする

こんにちは、とまだです。

**猫ってかわいいですよね🐈**

私は猫を飼っています。

猫を飼っていると、目の前に猫が出てきて作業の邪魔をされることがありますが、それはそれでご褒美なのです。

ただ、猫アレルギーの人や、猫を飼うことができない環境にいる人にとっては、猫と触れ合う機会がなかなかありません。

そこで私は考えました。

> **誰もが猫に邪魔される幸せを味わえる世界を作りたい!**

この Gem は、そんな世界征服を目指す Ruby on Rails アプリ用の Gem です。

何を言っているか分からないかもしれませんが、**こういうこと**です👇

![画面収録-2024-10-04-19.45.20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364501/3ea1765e-93f2-9c3c-a9ec-26572e9bc655.gif)

これであなたの作業も捗ること間違いなしですね!!!!

休日に暇すぎてこの gem をご存知 [RubyGems.org](https:/

元記事を表示

【Ruby】後置ifは便利だけど計画的に使おう

# はじめに
本日は後置ifについての記事を書きたいと思います。
後置ifとは簡潔で読みやすいコードを書くための構文で、条件分岐を一行で書けるようにします。
主に、シンプルな条件を確認して動作を行いたいときや、コードの可読性を高めたいときに使用します。
後置ifの基本構文は`処理 if 条件`になります

## 後置ifのメリット
例えばこれは普通の`if`文です
“`ruby:if.rb
if is_holiday
puts “Enjoy your day!”
end
“`
一方後置ifを使用すると
“`ruby:back_if.rb
puts “Enjoy your day!” if is_holiday
“`

とこんな感じで1行で済ませることができるのです。
メリットをまとめると
* コードが簡潔になる
* 可読性の向上
* 無駄なインデントを減らす
* 軽量な条件処理に向いている

## 後置ifのデメリット
上記を見る限りだとメリットのほうが多いからこれからは後置ifを多用しようと思いますよね。
しかし後置ifを使うことで可読性が逆に落ちてしまう例もあるのです

元記事を表示

質問アプリの作成 #2

# ビューを作る

ターミナルでrails s を入力。

ポートからURLで飛びrails起動されたのを確認したら、
さらにroutesで設定した questions/new をURLに付け足す。

試しにviews > questions > new.html.erbを新規ファイルで作り、
H1タグでNEWを記述。
サーバーを再度確認、「NEW」の記述が確認できたら次のステップへ

QuestionsControllerを開き空のquestionモデルのインスタンスを使うため
準備する。

ここでは、newメソッドが呼ばれます。

“`
#質問の作成
def new
@question = Question.new
end

“`

Question.newでQuestionのインスタンスを新規に作成し変数@questionに入れます。
次にView側を編集
(ホームビルダーと呼ばれるrails機能を利用します)

“`

NEW

<%= form_with model:@question do |form| %>

元記事を表示

gemを使う?自分で書く?Starを確認しよう

# 今回はgem導入時に自分が注意すべきだと思う点について話したいと思います。
それはズバリ
### Starの数
です

# gemって何?

:::note info
gemとは、RailsやRubyのアプリケーションに追加の機能を提供するために使用されます。例えば、認証システム、ファイルアップロード、テストフレームワーク、データベース接続などの機能を提供するものがあります。
:::

# 具体例

例えば、画像についてバリデーション処理を行いたい場合、
active_strage_validationを利用してもいいですが、このgemのstarを見ると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3878564/5755fbfb-707d-2fe6-3de1-c46668bee443.png)
1kしかstarがついていないことがわかります。

なので、このgemを入れるよりは、
“`
class Article < ApplicationRecord has_one_a

元記事を表示

RSpecでHTTP通信を記録するVCRの簡単な設定を考える

## はじめに

[VCR]という gem を使うと、[RSpec]のテスト実行中に API を直接叩かず、代わりに過去のリクエスト・レスポンスの記録(カセットと呼ばれるYAMLファイル)を繰り返し使用することができます。

[VCR]には色んな設定項目がありますが、個人的には結局はシンプルな使い方しかしないことが多いので、[VCR]の基本機能を簡単に使える設定を考えてみました。

[VCR]の細かい機能については[公式ドキュメント][VCR]やネット上のブログ記事をご参照ください。

https://benoittgt.github.io/vcr

https://www.rubydoc.info/github/vcr/vcr

[RSpec]: https://rspec.info/
[RSpec – Hooks]: https://rspec.info/documentation/3.13/rspec-core/RSpec/Core/Hooks.html
[RSpec – Metadata]: https://rspec.info/documentation/3.13/rspec

元記事を表示

【Rails】Cloud9でRailsアプリケーションを作成・設定する手順

# 開発環境
Rails version: 6.1.7.8
Ruby version: ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]​

# 概要

– Railsアプリケーションの作成手順と基本構造
– 主要ディレクトリ(app, bin, config, db, public, test)の役割
– Gemとは何か、Gemfileの役割について説明
– 画面表示に必要なファイル(routes.rb, controllers, views)の機能
– アプリケーション作成からサーバー起動までの手順を詳細
– エラー対処法(プラグイン追加、ホスト設定)について

# ① アプリケーションの作成手順
以下のコマンドでRailsアプリケーションを作成します。
“`ruby:ターミナル
rails new 任意のアプリケーション名
“`
`※environment下で行うこと`
ターミナル上に**create**という文字がたくさん表示されれば、正常にアプリケーションが作成されています。

もし以下

元記事を表示

install rbenv/ruby systemwide on RockyLinux 8.8

# TL;DR

* require libyaml-devel

# requirement

“`
dnf install –enablerepo=powertools libyaml-devel
dnf install git
“`

https://tklife.exblog.jp/30483319/

RHEL 9系では別のリポジトリらしい

https://www.hsbt.org/diary/20230126.html

# rbenv

“`
git clone https://github.com/rbenv/rbenv.git ~/.rbenv

echo ‘eval “$(~/.rbenv/bin/rbenv init – bash)”‘ >> ~/.bashrc
exec -l $SHELL
“`

## check

“`
rbenv -v
rbenv 1.3.0-4-gc335ab8
“`

# ruby-build

“`
git clone https://github.com/rbenv/ruby-build.git “$(rbenv

元記事を表示

OTHERカテゴリの最新記事