Ruby関連のことを調べてみた2023年11月02日

Ruby関連のことを調べてみた2023年11月02日
目次

DeviseGemでのデフォルトバリデーションをテストしよう

## DeviseGemでのデフォルトバリデーションをテストしよう

DeviseGemは、Ruby on Railsアプリケーションでユーザー認証を簡単に実装できるツールです。しかし、デフォルトのバリデーションをテストしてアプリケーションのセキュリティとデータ整合性を確保することは非常に重要です。以下に、DeviseGemのデフォルトバリデーションをテストするための7つの具体的なテストコードを示します。

“`ruby
# 1. emailが空でないことをテスト
it ‘validates presence of email’ do
user = User.new(email: nil)
expect(user).not_to be_valid
end

# 2. passwordが空でないことをテスト
it ‘validates presence of password’ do
user = User.new(password: nil)
expect(user).not_to be_valid
end

# 3. パスワードが5文字以下でないことをテスト
it

元記事を表示

【ruby】値オブジェクトを使うと超読みやすくなるケース

# 年月の範囲をDateクラスで扱うのがダルい…

– 2023年1月、2023年2月…と月単位のラベルを持つグラフを作る
– 2023年1月号、2023年2月号…と月単位で提供される雑誌を扱う

といった、年月を扱うケースでは、ただのDateクラスではちょっと役不足ですよね。例えば以下のようなコードを考えてみます。

“`ruby
require ‘date’

start_year_month = Date.new(2023, 9, 1)
today = Date.today
latest_year_month = Date.new(today.year, today.month, 1)

#
# 期間でループしたいとき
#
tmp_month = start_year_month
while tmp_month <= latest_year_month pp tmp_month.strftime('%Y%m') tmp_month = tmp_month.next_month end # => “202309”
# => “2

元記事を表示

【個人開発】服好き・カフェ好きのためのショップ検索サービス「服カフェ」をリリースしました

## はじめに
こんにちは、@jinta_02と申します。
この度、服好き・カフェ好きのためのショップ検索サービス「服カフェ」をリリースいたしました!
完全未経験で初めての個人開発だったため苦労する点もありましたが、その中でも工夫した点をお伝えできればと思いますので、技術的な部分で誤りがありましたらコメント等いただけますと幸いです?‍♂️

## サービス名:[「服カフェ」](https://fuku-cafe.com)
[![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2600084/e5cb45ea-dc3f-5198-f249-7fd21289d1f8.png)](https://fuku-cafe.com)

▼サービスURL:https://fuku-cafe.com

▼Github:https://github.com/jinta-shimo02/fuku_cafe

▼告知ツイート:https://twitter.com/jin_XXX222/status/171853523

元記事を表示

Ruby on Railsで使える画像処理ツール4選

# Ruby on Railsで使える画像処理ツールまとめ

Ruby on Railsのウェブアプリケーションで画像アップロードと処理が必要な場合、Active Storage、ImageMagick、MiniMagick、およびImageProcessingなどのツールが非常に役立ちます。この記事では、これらのツールについて詳しく説明し、どのようにプロジェクトに統合できるかについて説明します。

## 1. Active Storage

Active Storageは、Ruby on Railsの標準ライブラリで、ファイルのアップロードと管理を簡単に行うためのものです。これは、主に画像やファイルのアップロードをサポートし、アクティブレコードモデルと緊密に統合できます。これにより、データベース内のリンク、クラウドストレージプロバイダー(例: Amazon S3)、またはローカルファイルシステムなど、複数のストレージバックエンドとの連携が容易に行えます。

## 2. ImageMagick

ImageMagickは、画像の作成、編集、変換、表示に使用されるオープンソースのソフトウ

元記事を表示

質問が分岐する診断機能

## はじめに
この記事では質問が分岐する診断機能の実装をします。
以下イメージ画像のように、回答次第で次の質問内容が変わるように実装していこうと思います。
![joukenbun_22599-600×600.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581319/ff6b3c08-a713-f7d4-abdc-b2d2022dd7f2.jpeg)

この機能を使って作成したサイト

https://huter.onrender.com

## 1.コントローラー設計
コントローラーを分岐させたい質問の数ー1個作ります(一つ目の質問の分岐だけnew.htmlとshow.htmlに書けるため)
今回は質問の分岐の数が4つだった場合を想定して実装していきます。
“`ruby:cmd
$ rails g controller topics
$ rails g controller topic2s
$ rails g controller topic3s
“`
“`ruby:topics_con

元記事を表示

【Ruby on Rails】自分だけしか投稿できなくする方法

## はじめに
この記事では自分以外に投稿をさせないための簡単な条件文を紹介します。
前提として、投稿機能、ログイン機能ができてからの条件になっています。
## viewページ
“`ruby:index.html.erb
<% if current_user.id == 1 %>
<%= link_to "新規投稿ページへ", コントローラー名_new_path %>
<% end %>
“`
## 解説
この条件式 `<% if current_user.id == 1 %>` はcurrent_user.id が1である場合の時に “新規投稿へ” というリンクを表示することができます。
“`ruby:index.html.erb
<% if current_user.id == 1 %>
user.id が1の時のみに表示される部分
<% end %>
“`
1番最初に登録した自分以外には新規投稿ページのリンクを表示させないように制限することで、自分以外投稿できないようにする方法になってます。

元記事を表示

RailsでCSVファイルをエクスポートしてみた(文字化けも対処)

どうもこんにちは。

最近、RailsでCSVファイルをエクスポートする方法を学んだのでメモします。

# 実装手順

## 1. クラス定義

導入方法は至って簡単です。使用したい機能のコントローラファイルの一番上に、以下のようにライブラリを定義します。

“`ruby
require ‘csv’

class SampleController < ApplicationController ... ``` これだけで`CSV`クラスのメソッドをコントローラ内で使用することができるようになります。 ## 2. exportアクションを定義 まず、使用したいコントローラに`export`メソッドを定義します。 ```ruby class SampleController < ApplicationController def export end end ``` ## 3. ルーティングを定義 ```ruby resources :samples do collection do get 'export' end end `

元記事を表示

バリデーションエラー時のrenderメソッドとredirectメソッドの違い

## バリデーションエラー時のrenderメソッドとredirectメソッドの違い

Ruby on Railsのコントローラーで、バリデーションエラーが発生した場合、`render`メソッドと`redirect`メソッドの違いは重要です。この記事では、これらのメソッドの違いと、それぞれの利用ケースについて説明します。

### `render`メソッドの利点

#### 1. バリデーションエラーの詳細を表示

`render`メソッドを使用すると、バリデーションエラーが発生したときに、詳細なエラーメッセージをビューに表示できます。これはユーザーにエラーの具体的な内容を伝え、修正の手助けをします。

#### 2. フォームの再表示

`render`メソッドを使用すると、フォームの入力内容を保持したまま、エラーメッセージとともに再度同じページを表示できます。ユーザーはエラーを修正しやすく、データの再入力が不要です。

#### 3. コントローラーアクションが再実行されない

`render`メソッドを使用すると、コントローラーアクションが再実行されず、バリデーションエラーが発生し

元記事を表示

Ruby on Railsで診断機能の実装

## はじめに
この記事ではラジオボタンを使った診断機能を実装していきます。
設計、質問内容などは以下の記事を参考にして作成しました。

https://qiita.com/nakamura9atsuya20/items/f6a967c2854f769fc6d4

## 1.コントローラー設計
“`ruby:cmd
rails g controller perfumes
“`
“`perfumes_controller.rb
class PerfumesController < ApplicationController def index end def new @perfume = Perfume.new end def show @perfume = Perfume.find_by(id: params[:id]) end def create perfume = Perfume.new(perfume_params) if perfume.s

元記事を表示

RENDERからAWS S3への移行に伴うエラーについて2

## Mysql(MariaDB)で設定したdatabase接続用のパスワードと、EC2ターミナル上で設定したパスワードが異なっているとエラーが出る

mariaDBで設定したパスワードと一致していないといけないので、もし片方が違うかったら修正する。

では確認するためには、どうすればいいのか。
それは、
EC2ターミナル上で設定したパスワードの設定を確認するには以下のコマンドを実行する。

“`bash
[ec2-user@ip-172-31-23-189 ~]$ sudo vim /etc/environment

“`

そうすると設定が確認できるので、確認し修正する。

元記事を表示

Railsのcreateアクションにおけるsubmitボタンのデフォルト名

# Railsの`create`アクションにおける`submit`ボタンのデフォルト名

Railsにおいて、フォームを使ってデータの新規作成を行う際、通常は`create`アクションが利用されます。このアクションでは、新しいデータベースレコードを作成するため、ユーザーにデータの入力を促すフォームが表示されます。その際、`submit`ボタンは非常に重要な要素で、ユーザーがデータを送信するためのトリガーとなります。

Railsにおいて、`submit`ボタンのデフォルトの名称は「Create + モデル名」の形式で決定されます。これはRailsのコーディング慣習に基づいた自動的な命名ルールです。例えば、`Post`モデルを新規作成するフォームにおいて、`submit`ボタンのデフォルト名は「Create Post」になります。同様に、他のモデルに対しても「Create モデル名」といった形式でボタン名が生成されます。

このデフォルトのボタン名の決定にはいくつかの利点があります:

1. **一貫性**: Railsの慣習に従った命名を使用することで、開発者間のコードの一貫性が保たれ

元記事を表示

Mechanize でXpathをメソッドチェーンしたら一回目のatで絞り込んだはずの範囲以外を二回目に検索していた

“`ruby:qiita.rb
page.at(“//node[@class=’class’]”)
.search(%(//*[text()=”text”]))
“`

みたいな文でスクレイピングしてたとき、どうしても参照範囲がおかしいのを検証して見つけたのが、基準が分からないけどatで指定した場所以外からもsearchする現象。
残念ながらgemを調べるほどの能力がないのでto_htmlしたものをnokogiriでパースした。

“`ruby:qiita.rb
node =page.at(“//node[@class=’class’]”).to_html

doc = Nokogiri::HTML(node)
doc.xpath(‘//*[text()=”text”]’).each do |link|
puts link.content
end
“`

もっといいやり方募集

元記事を表示

マイグレーションファイルのnull: false と モデルファイルの presence: true の違い、および スキーマ定義とバリデーション定義の比較

# マイグレーションファイルの`null: false` と モデルファイルの `presence: true` の違い、および スキーマ定義とバリデーション定義の比較

データベース設計とアプリケーションのデータ整合性の確保において、`null: false` と `presence: true` の違いは重要です。さらに、これらの概念をスキーマ定義とバリデーション定義と比較して理解しましょう。

## 1. `null: false` と `presence: true` の違い

### `null: false` (マイグレーションファイル)

– **関連性**: データベース設計に関連。
– **目的**: データベーステーブルの特定のカラムが「null」(空値)を許容しないことを指定。
– **例**: `t.string :name, null: false` は、`name` カラムが必ず値を持つことを保証。

### `presence: true` (モデルファイル – バリデーション)

– **関連性**: アプリケーションのモデルに関連。
– **目的**:

元記事を表示

Railsでログアウトボタンを作成する際のHTTPメソッド変更

## Railsでログアウトボタンを作成する際のHTTPメソッド変更

Railsでログアウトボタンを実装する場合、通常は`link_to`ヘルパーメソッドを使用します。ログアウトの操作はセッションを削除するアクションとして、HTTPメソッドとしては`DELETE`が適しています。しかし、`link_to`ヘルパーメソッドはデフォルトでHTTPメソッドが`GET`に設定されています。そのため、HTTPメソッドを`DELETE`に変更する必要があります。これはTurboフレームワークを使用する場合に特に重要です。

### 1. ログアウトボタンの作成

まず、ログアウトボタンを作成します。通常、`link_to`ヘルパーメソッドを使用して次のように記述します。

“`erb
<%= link_to 'ログアウト', logout_path %>
“`

### 2. HTTPメソッドの変更

`link_to`ヘルパーメソッドを使用する場合、HTTPメソッドを変更する必要があります。これはTurboフレームワークの仕様に合わせたものです。ログアウトアクションを`DELETE`メソッ

元記事を表示

Rubyでoptparseを使う方法

こんにちは!みんみんです。
今回はRubyでoptpatseを使う方法についてまとめました。

## 「optparse」って?
[optparse](https://docs.ruby-lang.org/ja/latest/library/optparse.html)とは、`コマンドラインのオプションを設定するための組み込みライブラリ`です。

要するにターミナルでコマンドを使用したい場合に、

– どんなコマンドを使うか
– コマンドを使ってどんな結果を出したいか

を決めるために使います。

組み込みライブラリなので、Gemのようにインストールする必要はありません。

## Rubyでコマンドなんていつ使うの?
そもそもですが、Rubyでコマンドを使うときとは一体いつなのでしょうか?
たとえば **「ファイルの処理に数値を指定したいとき」** です。

今回はカレンダーアプリの実装を例にしてみましょう。
「◯月だけ出力したい」など、指定した月のカレンダーだけを表示したいとします。
その場合、以下のように指定したオプションを入力すると、好きな月のカレンダーだけを出力できるようになり

元記事を表示

Ruby on RailsのMVCとルーティング

# Ruby on RailsのMVCとルーティング

Ruby on Rails(以下、Rails)は、MVC(Model-View-Controller)アーキテクチャを採用しているフレームワークです。このアーキテクチャは、アプリケーションのコードを整理し、保守性を向上させるのに役立ちます。この記事では、RailsのMVCとルーティングについて詳しく説明します。

## MVCアーキテクチャ

### 1. Model(モデル)
– データとデータベースの操作を担当します。
– ビジネスロジックを定義し、データのバリデーションを管理します。
– ActiveRecordと組み合わせてデータベースと対話します。

### 2. View(ビュー)
– ユーザーに表示される部分を担当します。
– HTMLやテンプレートで表現され、データの表示を制御します。
– ユーザーに情報を提供し、ユーザーインターフェースを構築します。

### 3. Controller(コントローラ)
– ユーザーからのリクエストを受け取り、ModelとViewを制御します。
– ルーティングに基づいて適切なア

元記事を表示

Ruby on Railsの7つの主要なアクション

## Ruby on Railsの7つの主要なアクション

Ruby on Railsは、Webアプリケーションを開発するためのフレームワークで、HTTPリクエストに対して7つの主要なアクションを提供します。これらのアクションは、CRUD操作(Create, Read, Update, Delete)に対応しており、データベースとのやりとりやビューの表示など、さまざまなタスクに使用されます。以下に、Railsの主要な7つのアクションを詳しく説明します。

### 1. `index` アクション

`index` アクションは、データベース内の複数のレコードを一覧表示するために使用されます。これは、例えば、記事一覧、商品一覧、ユーザー一覧などのページを生成するのに役立ちます。一般的に、コントローラ内でデータを取得し、対応するビューで表示します。

### 2. `show` アクション

`show` アクションは、特定のレコードの詳細情報を表示するために使用されます。一般的な用途として、個別の記事、商品、ユーザーなどの詳細ページが挙げられます。コントローラは、リクエストされた特定のレ

元記事を表示

Ruby on Railsでよく使用される10の主要なバリデーション

# Ruby on Railsでよく使用される10の主要なバリデーション

Ruby on Railsはデータの整合性を保つためにさまざまなバリデーションを提供しています。これらのバリデーションはモデルの属性に適用し、データが期待どおりの形式で保存されることを確認します。以下に、Railsでよく使用される10の主要なバリデーションを説明します。

## 1. 存在性のバリデーション (Presence Validation)

`presence` バリデーションは、指定した属性が空でないことを確認します。これは通常、必須フィールドの検証に使用されます。たとえば、ユーザーが名前を入力する必要がある場合、以下のように使用します。

“`ruby
validates :name, presence: true
“`

## 2. 文字列の長さのバリデーション (Length Validation)

`length` バリデーションを使用すると、文字列の長さを制限できます。最小長さと最大長さを指定でき、文字列の長さがその範囲内に収まるかどうかを確認します。

“`ruby
valid

元記事を表示

RSpecを使用したテストの基本手順

# RSpecを使用したテストの基本手順

RSpecはRubyベースのテスティングフレームワークで、Ruby on Railsを含む多くのプロジェクトで使用されています。RSpecを使用してアプリケーションのテストを行う基本的な手順を説明します。

## 1. RSpecのインストール

アプリケーションにRSpecを導入するには、`Gemfile`にRSpecのGemを追加します。Gemfileに以下の行を追加し、`bundle install`を実行します。

“`ruby
group :development, :test do
gem ‘rspec-rails’
end

その後、次のコマンドでRSpecを設定します。

“`bash
rails generate rspec:install
“`

## 2. テストの作成

RSpecでは、テストスクリプトを生成し、それに基づいてテストを記述します。例えば、ユーザーモデルのテストを作成するには、ターミナルで以下のコマンドを実行します。

“`bash
rails generate rspec:model Us

元記事を表示

データベーステーブルにカラムを追加する方法

# データベーステーブルにカラムを追加する方法

データベース設計はアプリケーションの要となる部分で、時折新しい情報を格納する必要が出てきます。幸い、Ruby on Railsなどのフレームワークはこのタスクを比較的容易に行うことができます。

## 1. マイグレーションファイルの作成

新しいカラムを追加するには、マイグレーションファイルを作成します。例えば、ユーザーのテーブルに誕生日カラムを追加する場合、ターミナルで以下のコマンドを実行します:

“`
rails generate migration AddBirthdayToUsers birthday:date
“`

このコマンドで`AddBirthdayToUsers`という名前のマイグレーションファイルが`db/migrate`ディレクトリに作成されます。

## 2. マイグレーションファイルの編集

生成されたマイグレーションファイルを開き、`change`メソッド内に新しいカラムを追加します。例:

“`ruby
class AddBirthdayToUsers < ActiveRecord::Migra

元記事を表示

OTHERカテゴリの最新記事