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

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

Rails7 で TODOアプリを作ろう ⑤ (i18nで日本語化)

## はじめに

### 前回は

#### statusをenumへ として

https://qiita.com/tomoaki-kimura/items/94c167b438e0485e2262

– バリデーション
– enum

について学びました。

### 今回は

#### i18nで日本語化 として

– i18n
– enum_help

について学びます。

では、はじめていきましょう。

## 1. I18nを使って日本語対応をする

### I18n

Railsには `I18n` という翻訳のための情報を別記する機能があり、カラム名や指定した情報等任意の情報に対して、言語切替をする事ができます。

この機能を利用して、例え日本人向けのサービスだとしても、日本語を翻訳ファイルに切り出す事によって、コード内に日本語が入る事を防ぐ事ができたり、 表記ゆれを防ぐ事も出来るので慣れておくと良いでしょう。

### config

翻訳ファイルで一番実装したいものとしては、各種のインフォメーションが英語だという事です。

例えば先程の空投稿のエラーですが

[![Ima

元記事を表示

Rails7 で TODOアプリを作ろう ④ (statusをenumへ)

## はじめに

### 前回は

#### TaskのViewにBootstrap5を適用として

https://qiita.com/tomoaki-kimura/items/76279fa062a9d0bc57a8

– bootstrap5

について学びました。

### 今回は

#### statusをEnumへ として

– バリデーション
– enum

について学びます。

では、はじめていきましょう。

## 1. バリデーション

最初に仕込みとなりますが、最低限のバリデーション設定をしておきます。

### バリデーション

バリデーションとはデーターの入力に対して制限を掛ける事で、空入力や多すぎる文字を防いだり、不正な入力を弾く事ができる機能です。

データーの登録前にチェックしようという事ですね。

### SQLのエラー

現在、データーを空投稿しようとすると、

[![Image from Gyazo](https://i.gyazo.com/605139044c452159c93a6113f20aaa84.png)](https://gyazo.co

元記事を表示

Everyday RailsでRspecについて学んだこと

## ドキュメント形式での出力
“`.rspec
–format documentation
“`
この設定を適用すると、実行中の各テストケースの名前が出力されるため、どのテストが成功したか、または失敗したかを一目で把握することができます。

これにより、テストの結果が直感的に理解しやすくなり、問題の特定と修正が迅速に行えるようになります。

### 設定前

設定を加える前は、テストの進捗が`.`や`F`で表示され、どのテストが失敗したのかすぐにはわかりません。

“`markdown
….F…..
“`

### 設定後

`–format documentation`を設定すると、各テストケースの説明が表示されるため、どのテストが成功し、どのテストが失敗したのかが一目でわかります。

“`markdown
計算
二つの数字を加算する
2と2を渡した時
4と等しいこと
-1と-1を渡した時
-2と等しいこと
二つの数字を減算する
2と2を渡した時
0と等しいこと
二つの数字を乗算する

元記事を表示

GoogleMapsAPIを使用した開発1(地図の表示)

# 1.はじめに
投稿された情報(緯度経度)からGooleMapsAPIを使用して地図を表示、地点間のルート検索機能、周辺情報の取得を実装したので知識の定着、復習のために記事を書きます。
一度に書くと長くなるので、4回にわけて投稿していきます。
今回はその1回目でMAP表示まで実装します。

# 2.環境
Ruby (2.6.4)
Rails (6.1.7)
Maps JavaScript API

# 3.前提条件
APIキー取得済み
投稿機能を実装している

# 4.実装
### 使用gem
“`ruby:Gemfile
gem ‘geocoder’
gem ‘gon’
“`

### テーブル構造
“`ruby:schema.rb
create_table “posts”, force: :cascade do |t|
t.string “address”
t.float “latitude”
t.float “longitude”
end
“`

## 1.投稿された住所、地名から緯度経度を保存できるようにする
### 1.gem`ge

元記事を表示

【Ruby】ブロックを理解したい

# 概要
ルビーのブロックは、コードの柔軟性と再利用性を高める強力なツールです。 これを活用すると、メソッドの動作を簡単にカスタマイズでき、これはルビーのさまざまなライブラリやフレームワークでも活用されています。 この記事では、ルビーが提供するブロックが何なのか、そしてどのように使用するのかについて見ていきましょう。

# 対象とする読者
– Rubyのブロックを知らない人

# ブロック
ブロックとは、メソッドが特定の時点で実行できるコードです。 ルビーでブロックを作成する文法は`do···end`と`{ }`の2つが存在します。 普通ブロックのコードがシングルラインなら`{}`、マルチラインなら`do···end`を使います。

**{ }**
“`ruby
method { puts “ここはブロックです。” }
“`

**do…end**
“`ruby
method do
puts “ここはブロックです。”
end
“`

# yield
ブロックとは何かを学びました。 では、一体ブロックはどのように実行すべきでしょうか? ルビーがそのために`yield`とい

元記事を表示

Railsでコードジャンプしたい

## 概要
VScodeの拡張機能でどうにかならんかな〜と思っていたところ、
そういった拡張機能はなかったので設定方法だけまとめておきます

## Railsでコードジャンプする設定方法
VScodeにある拡張機能のRubyは入れておいてください!

1. Command + , で設定を開きます
2. 検索部分に “ruby” と打って検索
3. Intellisenseを false から rubyLocate に変更

上記だけで設定が完了します。
VScode を再起動すれば設定が適応されるはずです。

元記事を表示

【Ruby】begin-end構文

# 書き方
“`rb
@sample ||= begin
# 処理1
# 処理2

# 戻り値
end
“`

**begin-end**は例外処理以外にも使用される。
複数の文をグループ化するために使用されるブロック構文。
→`begin`と`end`の間に挟まれた部分は、1つのまとまりとして扱われる。

# begin-end構文とメソッドそれぞれのメリット
– begin-end構文
– 複数の処理を1つのまとまりとして扱い、それを直接変数に代入したい場合に便利。
– メソッド
– 再利用性と可読性を高めるために使われ、大きな処理をまとめる際に便利。

# サンプルコード
“`rb
class Sample
def execute
# 処理終了:対象会員が存在しない場合
if target_members.blank?
puts ‘対象会員が存在しません。’
exit
end

# 更新処理 ※省略
update_members(target_members)
end

元記事を表示

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` (モデルファイル – バリデーション)

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

元記事を表示

OTHERカテゴリの最新記事