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

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

日本語化 i18n

# 1.はじめに
– 日本語化対応の手順をメモ

# 2.日本語化実装
### 2−1.i18nのプラグインを確認
“`
$ bundle list
“`
– 一覧を確認して`i18n (1.12.0)`などの記載があればOK
– ない場合は、`Gemfile`に下記を記載
“`:Gemfile
gem ‘rails-i18n’
“`
その後
“`
$ bundle install
“`

### 2−2.config/application.rbに下記を追記
“`:config/application.rb
config.i18n.default_locale = :ja
“`

### 2−3.翻訳用ファイルをgitHubからダウンロード
https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml

ダウンロード後`./config/locale/`の配下に入れる。

### 2−4.日本語訳をja.ymlに追加する
“`:./config/locale/ja.yml
ja:

元記事を表示

Railsでモデル名.newしたときのBoolean型の変換について調べた

# 前提

調査に使用したRailsとActiveModelのバージョンは以下の通り。

“`ruby:rails console
irb(main):101:0> Rails.version
=> “7.0.4.2”
irb(main):102:0> ActiveModel.version
=> Gem::Version.new(“7.0.4.2”)
“`

# 調べたことと結論

RailsでBoolean型の属性を持つモデルのインスタンスを生成するときに、以下のように適当な値を入力すると `false` になったり `true` になったりしたのでどこで定義されてるのか調べてみた。

“`ruby:rails console
irb(main):001:0> Book
=> Book(id: integer, is_e_book: boolean, created_at: datetime, updated_at: datetime)
irb(main):002:0> Book.new(is_e_book: true).is_e_book
=> true
irb(main)

元記事を表示

stripe(connect)においてプラットフォームで作成したcustomerと支払い情報を連結アカウントに複製・コピーする方法

今回はプラットフォームで登録しているサブスクリプション情報をもとに、連結アカウントに顧客情報と支払い情報をコピーしていく。

“` controller.rb
# サブスクリプション情報を取得
@sub = Stripe::Subscription.retrieve(
“sub_××××××××××”, # サブスクリプションID
)

# 支払い情報の複製
@payment_method = Stripe::PaymentMethod.create({
customer: @sub.customer, # カスタマーID
payment_method: @sub.default_payment_method, # paymentMethodのID
}, {
stripe_account: “attr_××××××××××”, # 複製先の連結アカウントID
})

Stripe::Customer.create({
email: “text@example.com”, # 顧客のメールアドレス
invoice_settings: {

元記事を表示

Ruby timesメソッドで繰り返し処理を行う

# timesメソッド
指定した数値の回数だけ、繰り返し処理を行います。

“`ruby
数値.times do
# 繰り返す処理
end
“`

5回繰り返し処理を行う場合は、5times. do~endとなります。

“`ruby
10.times do |i|
puts i + 1
end
“`

“`
# ターミナル出力
1
2
3
4
5
6
7
8
9
10
“`

|i| これはブロック変数と言います。iは任意の変数です。
##ブロック変数とは、do~endで囲まれた処理のまとまりの言います。

“`ruby
数値.times do |ブロック変数|
# 繰り返す処理
# 繰り返しの回数を使う場合、ブロック変数を使用する
end
“`

# timesメソッドを使って繰り返し処理を行う

timesメソッドを使って、1~100の数字を足し合わせていくための、コードを考えてみる。

“`ruby
sum = 0
100.times do |i|
sum += i + 1
end
puts sum
“`

“`
5050
# ターミナ

元記事を表示

【Rails】Rakeタスク「task xxx: :environment do」の意味

# 結論

`environmentタスク` → `xxxタスク(実行する処理)`の順に処理が実行される。

“`rb
task xxx: :environment do
実行する処理
end
“`

# 仕組み

– taskの引数にはハッシュが渡っており、key-value相当(`{ xxx: environment }`)の関係にある。
– rakeが提供する`Prerequisites`機能によって、valueのタスクを事前に実行できる。
– Hashリテラルのため、以下のように書いても動作する。

“`rb
task :xxx => :environment do
実行する処理
end

task xxx: [:environment] do
実行する処理
end
“`

# environmentタスク呼び出しの流れ

“`
railties/lib/rails/application.rb
run_tasks_blocks 呼び出し

task :environment を実行

require_environm

元記事を表示

リレーションとアソシエーションの違いをアリでもわかるようにまとめておく

## はじめに
リレーションとアソシエーションの違いについて簡単にまとめておく。
だれかの役に立てば幸いです。

## リレーションとアソシエーションの違い
### リレーション
リレーションはテーブル同士の関係のこと。
例えば、1対多とか多対多とか、そういうこと。

### アソシエーション
アソシエーションは、クラス同士の関係のこと。
ユーザーは複数の投稿を持っているとか、こんな風に表現すること。
Railsで言えば、Userモデルはhas_many :postのアソシエーションみたいな感じで使うはず。多分。

## リレーションとアソシエーションの違いに関するまとめ
– リレーション
これは、テーブル間の関係についてのことを言う。
– アソシエーション
これは、クラス同士の関係を表す概念。オブジェクト指向プログラミングにおいての概念らしい。

元記事を表示

Rails 7 (api モード)+MySQL 8.0.16のDocker環境構築手順

# はじめに
Ruby on Rails の開発に触れてもう5年近く経ちます。
そこで今の私ならRails の新規構築はこうするというので記事をまとめました。
試しにRuby on Rails の環境構築をしてみたいという方がいたら参考になれば幸いです。

# 余談
本記事で作成した環境を使って、
– rootless コンテナ設定
– 初期構築で使うライブラリ(Gem)の追加
– GraphQL の導入
– GraphQLを使ったAPI の作成
– フロント側の環境構築 (React.js)
– フロントと、APIの疎通確認

の記事を書いていこうと思います。(記事を書いたらリンクとして編集していく予定です:bow:)
気になる方がいたらLGTM or ストックお願いしますー。そこで通知が来ると思いますmm

# 環境
– Ruby
– 3.1.2
– Ruby on Rails
– 7.0.4
– MySQL
– 8.0.16
– MacOS(Monterey)
– 12.5.1

# How-to

## 1. 必要なファイルを作成

“`bash
$ t

元記事を表示

Ruby on Rails7の開発環境構築(PostgreSQL版)

# 概要

※当記事は所属している[株式会社コンピュータテクノブレイン](https://computer-tb.co.jp/2022/05/20/%e3%80%90%e6%8a%80%e8%a1%93%e3%83%96%e3%83%ad%e3%82%b0%e3%80%91ruby-on-rails7%e3%81%ae%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83%e6%a7%8b%e7%af%89%ef%bc%88postgresql%e7%89%88%ef%bc%89/)にて投稿した内容を転載したものです。

`Ruby on Rails 7`の`Docker`を使用した開発環境の構築についての手順を紹介します。

あまり`PostgreSQL`を使用した例がなかったため`PostgreSQL`を使用した環境を構築してみようと思います。

# 構成

2022年5月18日時点での環境を示します。

– macOS Monterey 12.3.1
– Docker 20.10.14
– Docker Compose v2.5.1
– Ruby 3.1.2

元記事を表示

【Rails】【Ajax】コメント投稿・削除を非同期通信化する。

# はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# 前提
Railsにて投稿アプリケーションを作成のち、投稿に対して、コメントできる機能実装済み。
今回は離乳食を投稿するアプリケーションで実装しています。

# 目標
### コメント機能が非同期で行えるようにする
[![Image from Gyazo](https://i.gyazo.com/77a19537f3913ba1aae0c363e79f5193.gif)](https://gyazo.com/77a19537f3913ba1aae0c363e79f5193)

# 手順
①jQueryの導入
②コメント表示部分を部分テンプレート化
③投稿機能の非同期化
④削除機能の非同期化

# ①jQueryの導入
“`text.Gemfile
———略———
gem

元記事を表示

Railsバージョンアップにおける変更PRの特定の仕方

## 本記事について
Railsに特化して書いているが汎用的ではある。
CHANGELOG.mdなファイルに全部載ってたら楽だが、全てのライブラリがそうではない。
じゃあどうやって調べるのかという話。

## 環境
ruby 2.7.5
Rails 6.1.7.1

## 本記事の題材

“`.rb
Rails 6.1の場合
[1] pry(main)> Time.current
=> Tue, 31 Jan 2023 10:12:36.749685920 JST +09:00

Rails 6.0の場合
[1] pry(main)> Time.current
=> Tue, 31 Jan 2023 10:06:14 JST +09:00
“`

Time.current.class
=> ActiveSupport::TimeWithZone

なため、ここに変更があったのかなと予想できる

ナノ秒出力されるようになってる!

## 調べ方1 変更が加わったバージョンを特定し、Releasesで確認

https://github.com/rails/rails/releases

元記事を表示

Railsで作成したテーブルのidを初期化する

## 環境
Rails 5.2
PostgreSQL12.10

## はじめに

タイトルにある通り、Railsで作成したテーブルのidを初期化する方法についての記事です。テーブルを全件トランケートした後、データを新規登録をすると、id=1から振り直してくれるものと期待していても、そのようにはしてくれません。全件トランケートしたとても、最後に登録したidの次から連番で振り続ける仕様になっています。

idはあくまで、内部的に管理される項目であるため、idに何が登録されようが、気にしなければいいのですが、1からきれいに連番で登録されていないと気持ちが悪いという人は、idを初期化する必要があります。

## やったこと
PostgreSQLにログインします。
“`
$psql -h localhost -d DB名 -U ユーザーID
“`

全てのidを表示させてみます。
“`
#select id from users order by id;
“`

データ件数が大量にある場合は1件に絞り込んで、idのMAXを調べます。
“`
#select max(id) from u

元記事を表示

Railsのタスクを定義する

Ruby on Railsアプリケーションを開発で定型の操作を繰り返すときは、タスクを定義すると便利です。

## 前提条件

あるRailsアプリケーションでは、ファイルアップロードジョブの途中で例外がおきたとき、処理途中のファイルやレコードが残ります。このため、開発の途中でしばしば次のコマンドを実行して、ゴミ掃除をしています。

“`sh
bin/rails runner ‘Job.destroy_all’
rm -rf tmp/upload-*
“`

## テンプレートの作成

今回はこのコマンドをRailsのタスクにしてみたいと思います。
Railsのタスクの実体はlibディレクトリ配下にあるRakeタスクです。
テンプレートをRailsのジェネレートコマンドで作ることが出来ます。

まず、最初にどのようなコマンドで、実行できると良いか考えてみましょう。
ジョブのゴミ掃除なので、`job:clean`が良いと思います。
完成したら次のように実行するイメージです。

“`sh
bin/rails job:clean
“`

タスク名がきまったらジェネレートコマンドでテン

元記事を表示

【Rails】(デプロイ初心者)Capistranoを使ってEC2に自動デプロイしたときに発生したエラーと対処法

AWS環境に自動デプロイというのを自分で1からやってみたくなったので、`Capistrano`を使ってEC2にRailsアプリをデプロイしました。
「ググって出てきた簡単な使い方通りに進め、1通り手順とかイメージ掴めればいいかな〜」くらいの気持ちでやったのですが、エラーがかなり出て勉強になったので対応と合わせてまとめておきます。

## 基本的に参考にしたサイト
https://github.com/capistrano/capistrano
https://github.com/capistrano/rails
[【Rails】 AWSのEC2にデプロイする方法~画像で丁寧に解説!](https://pikawaka.com/rails/ec2_deploy)
[【Rails】 Capistranoを使ってデプロイを自動化しよう](https://pikawaka.com/rails/capistrano)
## あらかじめお伝え

– エラーメッセージの深掘りができていない点が多々あります
※今回の私の目標は「Capistranoを使って自動デプロイの手順を1通り経験すること」であ

元記事を表示

decimal と int の違いってなんや?

# 目次

1. [はじめに](#はじめに)
2. [結論](#結論)
3. [データ型種類一覧](#データ型種類一覧)
4. [integer と bigint の違い](#integer-と-bigint-の違い)
5. [decimal と numeric の違い](#decimal-と-numeric-の違い)
6. [参考URL](#参考url)

## はじめに

Rails の開発でテーブル作成時に decimal と int を使い分けている PR を見かけたので、dicimal と int の違いについて調べてみました。
間違いあったらご指摘ください ?

## 結論

decimal は固定長整数型, integer は整数型(4 バイト)
decimal は、全体の桁数-精度(precision)と小数点以下の桁数(scale)を指定された浮動小数点データに対し、
integer は、整数だ!!!!

## データ型種類一覧

| データ型 | 種類

元記事を表示

Rails7のローカル開発環境をhttps接続させる

# 概要
Rails7のローカル開発環境をhttpsで接続させる方法について調べたのでメモとして記載
調べるといくつか方法はあるが、今回は`https-portal`を使ってアクセスできるようにしてみた

以下の記事をなぞりつつ、途中でつまづいた部分を記録
https://zenn.dev/dragonarrow/articles/1f3c34e31d0acc

# 前提
* local環境のdockerでRails7が動く

# local環境
* M1 Mac
* OS:Monterey

# 流れ

## /etc/hostsにドメインを追加
local環境で`/etc/hosts`ファイルに以下を追加

“`hosts
127.0.0.1 devsite.local
“`

## docker-compose.ymlにhttps-portalを追加
environmentのDOMAINSにhostsで指定したものと同じものを指定

“`docker-compose.yml
:
:
https-portal:
image: steveltn/https-por

元記事を表示

【Rails】制限時間機能を実装してみた。(解説付き)

## 1.バージョンを確認しましょう!

Rails 5.1.6
ruby 2.7.2p112

## 2.完成イメージ

投稿に制限時間を設定し、何かしらの処理をつける機能です。
今回は **「投稿(タスク)を設定し、制限時間を超えると通知が来る機能」** を実装する準備段階です。

## 3.実装の大きな流れ

>1.投稿モデル(Tweet)に、制限時間を保存するカラムを追加する。
>2.投稿を保存するときに、制限時間と現在時刻を比較して、制限時間が過ぎていないかをチェックするアルゴリズムを記入する。
>3.制限時間が過ぎている場合はエラーを返し、投稿を保存しない設定を仕込む。

ちなみに本記事はこのような目次で進んで行きます!
一緒に楽しんでいきましょう ᕙ( ˙꒳​˙ )ᕗ

## 4. モデルに、制限時間を保存するカラムを追加しよう。

“`ターミナル
$ rails generate migration AddLimitTimeToTweets limit_time:datetime
$ rails db:migrate
“`

tweetsテーブルに、**limit_

元記事を表示

数値がどうかを検証する

# 2.9 numericality
このヘルパーは、“`属性に数値のみが使われていることを検証“`します。デフォルトでは、“`整数値または浮動小数点数値にマッチ“`します。これらの“`冒頭に符号がある場合もマッチ“`します。
“`:only_integer“`をtrueに設定すると、属性の値に対するバリデーションで以下の正規表現が使われます。
“`
/\A[+-]?\d+\z/
“`
それ以外の場合は、Floatを用いる数値の変換を試みます。Floatは、カラムの精度または15を用いてBigDecimalにキャストされます。
“`rb
class Player < ApplicationRecord validates :points, numericality: true validates :games_played, numericality: { only_integer: true } end ``` :only_integerのデフォルトのエラーメッセージは「must be an integer」です。 このヘルパーでは、:only_int

元記事を表示

定義した値かどうかを検証する

# 2.7 inclusion
このヘルパーは、“`指定の集合に属性の値が含まれているか“`どうかを検証します。集合には任意のenumerableオブジェクトが使えます。
“`rb
class Coffee < ApplicationRecord validates :size, inclusion: { in: %w(small medium large), message: "%{value} のサイズは無効です" } end ``` inclusionヘルパーには:inオプションがあり、受け付ける値の集合を指定します。```:inオプションには:withinというエイリアスもあり、好みに応じてどちらでも使えます。``` 上の例では、属性の値をインクルードする方法を示すために:messageオプションも使っています。完全なオプションについては、:messageのドキュメントを参照してください。 このヘルパーのデフォルトのエラーメッセージは```「is not included in the list」```です。 # 出典 https://railsguides.jp

元記事を表示

正規表現を使うバリデーション

# 2.6 format
このヘルパーは、withオプションで“`与えられた正規表現と属性の値がマッチ“`するかどうかを検証します。
“`rb
class Product < ApplicationRecord validates :legacy_code, format: { with: /\A[a-zA-Z]+\z/, message: "英文字のみが使えます" } end ``` ```:without```オプションを使うと、```指定の属性にマッチしない正規表現を指定することもできます。``` デフォルトのエラーメッセージは「```is invalid```」です。 ### 出典 https://railsguides.jp/active_record_validations.html#:~:text=2.6%20format,is%20invalid%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82 # 感想 正規表現が大変だった。

元記事を表示

macOS に rvm をインストールする

macOS に `rvm` (Ruby Version Manager) のインストール方法を記述します。
※ `rvm` とは、`ruby` バージョンの切り替えソフトウェアです。

## 環境

– macOS Ventura バージョン 13.1

## Install GPG keys

– `GPG` (GNU Privacy Guard) パッケージのインストールします。

“`sh
brew install gpg
“`

– `rvm` インストールパッケージの検証に使用する `GPG` キーをインストールします。

“`sh
gpg –keyserver keyserver.ubuntu.com –recv-key 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
“`

※ [公式ページ](https://rvm.io/rvm/install) に書いてあるコマンドを使うとエラーになります。
`gpg: 鍵サーバからの受信に失敗しました: S

元記事を表示

OTHERカテゴリの最新記事