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

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

Railsの本番環境を作る

## 概要
Railsの本番環境を作る手順です。

## 環境
– Ubuntu20.4 (vagrant)
– PostgreSQL12.4
– Rails5.2

## 手順

#### アセットファイルのプリコンパイル

アセットファイルをプリコンパイルします。JavaScriptsでコードを書いている場合、プリコンパイルでYarnが使われます。Yarnがインストールされていなければ、Yarnがありませんというエラーメッセージが表示されますので、事前に、Yarnをインストールしておく必要があります。
“`
$rails assets:precompile RAILS_ENV=production
“`

>(トラブルシュート)
>このようなエラーが出てきました。対応方法はメッセージにある通りです。ハーモニックモードを有効にする設定場所は、config/production.rbです。
>
>To use ES6 syntax, harmony mode must be enabled with Uglifier.new(:harmony => true). (訳)ES6 構

元記事を表示

コールバックでのsaved_change_to_ と will_save_change_to

## はじめに
スクールにて、コールバックの設定に手間取り、その際調べることで挙動の違いを理解したつもりなので、同じようなことにハマった人のためになればいいなと、健忘録として残します。

### 開発環境
Rails 6.1.7.4
ruby 3.0.1

### 目的
管理者が、最後の1人のとき、管理者が0人とならないように権限の編集を制限する。
つまり、1人もいなくなっちゃ困るので、必ず1人は権限を在籍させたい訳です。

### 最初に試したこと(失敗したこと)
– Qiita記事や調べてまずは下記のように設定
“`rb
def admin_cannot_update
if User.where(admin: true).count == 1 && self.saved_change_to_admin == [true,false]
throw :abort
end
end
“`
adminに設定されたユーザーがデータベースに1人だけであり、かつ対象のオブジェクトのadminカラムをtrueからfalseに変更しようとしたとき、 thow :abortで更新を中

元記事を表示

画像複数投稿

# 初学者の備忘録
初学者の備忘録です。前に投稿した[画像投稿]()の発展、画像複数投稿編
[参考にした記事](https://qiita.com/oak1331/items/830755889a37ceee1bc6)

## 注意
前回の画像投稿はプレビュー機能も一緒に載せてましたが、今回は複数投稿なのでプレビューは表示できません。これから挑戦しようと思います。

## 実装
【1】 アソシエーション
元々あったアソシエーションは単数なので複数に対応したアソシエーションに変更します。
“`diff_ruby:app/model/必要ファイル名


# 単数投稿
– has_one_attached :image
# 複数投稿
+ has_many_attached :images


“`

【2】 ストロングパラメーター
ストロングパラメーターの定義をハッシュ形式にします。ハッシュ形式にした場合は最後に記述してください。
“`diff_ruby:app/controllers/必要ファイル名


private

def place_

元記事を表示

【個人開発】LINEMessagingAPIを使って無差別に飯テロできるアプリを作りました

# はじめに
こんにちは、すずゆーと申します。

突然ですが皆様は飯テロをしたことはありますでしょうか。
私はSNSに美味しいご飯をアップするのが大好きです。
アップした写真に対してフォロワーさんからの反応を楽しむのが大好きです。

しかし、SNSだとせっかくアップしても本当に見てもらいたい人に見てもらえない時があったり…
そんな中、LINEなら確実に相手に届くし見てもらえるじゃん!ということで私の悪戯心を具現化したアプリを開発しました。

## 記事を読む上での注意点
当記事はプログラミング学習を開始して日の浅い業界未経験者が書いたものになりますので、技術的な内容などは誤りを含む可能性があります。予めご了承ください。

# サービス名

### 飯テログ
URL: https://meshitelog.com
GitHub: https://github.com/suzuyu0115/meshitelog
![placeholder.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493892

元記事を表示

フォームヘルパー セレクト編

# 初学者の備忘録
初学者の備忘録です。今回は前に投稿したフォームヘルパー編で出てきたフォームの種類selectについて詳しく紹介していこうと思います。応用編です。

## selectとは
フォームを選択している状態だと選択フォームが表示されるフォームレイアウトのことです。

閉じている状態
![CE859C94-3E56-49BC-8986-94D07BA64741.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3503032/4ba10f1e-827c-951e-6920-446bd725fe99.jpeg)

選択している状態
![85F92C8E-094E-4D60-B3CE-563845C93F3F.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3503032/bf54b1ac-e682-c37c-1ce2-d9410ffdbeb0.jpeg)

## 一覧
対象Modelから対象カラムに保存されてい

元記事を表示

フォームヘルパー実装(form_with)

# 初学者の備忘録
初学者の備忘録です。今回はForm_withヘルパー編

## フォームヘルパーとは
入力のためのフォームを作成するためにHTMLにはフォームタグというタグが存在する。
Railsのヘルパーメソッド「フォームヘルパー」を用いて、フォームタグを生成できる。
フォームヘルパーには3種類存在します。簡単に説明すると
・form_tag・・・入力フォームのレイアウトだけ作る
・form_for・・・form_withと内容はほとんど同じ。ただ、HTTPメソッドを定義してあげる必要があるのでアレンジができる
・form_with・・・form_forを楽に記述できるようにしたもの。HTTPメソッドを省略することができるが、ルーティングでonlyで囲めるような基本的なHTTPメソッドしか使えない。
になります。詳しくは[参考資料](https://pikawaka.com/rails/sub_category/form-helpers)をご確認ください。

今回はform_withを使用した入力フォームの実装方法になります

## 実装
それではfrm_withを使用した入力

元記事を表示

each文で出力するデータの数を指定する方法

# 目的
検索をかけても自分の理想とする記事がなかなか見つけることができなかったためこちらに使用方法をまとめます。

# 数の指定
例えばpostsテーブルがあったとして5つ取得したいと考えたときコントローラ ビューファイルに以下のように記述します。

“`ruby:posts_controller.rb
@posts = Post.all
“`
“`ruby:viewファイル
<% @posts.limit(5).each do |post| %>
# ~~~~~
<% end %>
“`
上記のようにeachメソッドを使う前にlimitメソッドで数を指定する流れでできました。

# まとめ
データを一部取得したいときに便利かと思いました。

# 参考記事
https://railsdoc.com/page/limit

元記事を表示

rails非同期処理 gem比較

実務で扱っているアプリケーション(Rails)に非同期処理を導入することになり、代表的なgemの特徴・メリット・デメリットを調査しました。せっかくなので簡単にまとめておきます。

## 調査対象のgem
– Sidekiq
– Shoryuken
– Rescue
– Delayed_job

## 比較表
GitHubスター数は2023年9月頃のものです。また「〇、△、✕」は条件次第で変わってくるものもあると思います、参考程度の認識でお願いします。

【Rails】Active Storageが提供するルーティングのプレフィックスを変更する方法

`config/application.rb`に以下の設定をすることでActive Storageが提供するルーティングのプレフィックスを変更できます。

“`config/application.rb
config.active_storage.routes_prefix = ‘/files’
“`

上記のようにした場合には`/rails/active_storage/blobs/*`から`/files/blobs/*`に変更されます。

【Rails】診断機能をラジオボタンを使って実装!


## 【Rails】診断機能をラジオボタンを使って実装!

今回はRuby on Railsで診断機能を実装します!
その時にチェックボックスではなくてラジオボタンを使って実装してみようと思います!
目次は以下の通りです!

### 1. コントローラー設計
### 1. データベース周り
### 1. Viewページ周り
### 1. ルート周り

## 1. コントローラー設計

“`ruby:travels_controller.rb
class TravelsController < ApplicationController def index end def new @travel = Travel.new end def show @travel = Travel.find_by(id: params[:id]) end def create @travel = Travel.new(travel_params) if @travel.save flash[:notice]

yml日本語対応

# 初学者の備忘録
初学者の備忘録です。今回は番外編といいますか、enumの記事でやったymlファイルを使用して日本語対応させる処理をもう少し詳しく記録として残しておこうと思います。

## 日本語対応
まずはアプリケーションのデフォルト言語を日本語にするコードを追記します。
“`diff_ruby:config/application.rb
   :
    :

module NaganoCake
class Application < Rails::Application : : +config.i18n.default_locale = :ja : : end end ``` 【2】 yml バリデーション 次にymlファイルにバリデーションを日本語表示させるコードを記述します。 ここまででymlファイルを作成していない場合、config/locales フォルダに ja.yml というファイルを作成しましょう。 ```diff_ruby:config/locales/ja.yml    ja: activerecord:

enum

# 初学者の備忘録
初学者の備忘録です。今回はenum編

## enumとは
enum とは、数値に意味を持たせることができるものです。数値に意味を持たせることのメリットは以下の通りです。

【メリット】
・決められた数値以外の登録が出来ないようにすることで安全性が高まる
・専用テーブルを作成しなくてもいい
・データベースに格納する時に、数値型の方がデータサイズが小さくなる

例えば支払い方法などにユーザー側がどの支払い方法を選択するか手入力するのではなく、enumを使用して選択式にしてあげることでクレジットカード、着払い、入金などの間違いが減るなどといったことです。

## 導入
【1】 Gem
enumは`enum_help`というGemなのでGemfileにenum_helpを記述します。最後の行で構いません。
“`ruby:Gemfile
   :
:
gem “enum_help”
“`

【2】 インストール
記述後、enum_help をインストールするために `bundle install` を行いましょう。
“`ruby:Gemfile
   $ bu

【初学者】API?パース?なにそれ?おいしいの?

# はじめに
お疲れさまです。
おおくまです。

今回は、個人的に私が苦手意識を持っている「**API**」と「**パース**」と向き合いました。
Railsでミニアプリを作りながら、理解を深めてみました。

# 環境
Ruby 3.2.2
Rails 7.0.8

# 注意点
:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合があります。
コメント等で教えていただけると幸甚です。
:::

# APIとは
「**API**」とは、「**Application Programming Interface**」の頭文字です。
**インターフェース**とは、コンピュータ用語でいうと、「何か」と「何か」をつなぐものという意味を持ちます。
**つまりAPIとは、アプリケーション、ソフトウェア、プログラムなどをつなぐものという意味になります。**
APIを利用し、そのアプリケーションと連携することで、自分で1からプログラムを組む必要がなくなり、アプリケーション開発の効率化がはかれます。
アプリケーション開発側にとって、開発時間を短縮することができるのは大きな

dockerで立ち上げたrailsがnon-JS module files deprecated.のエラーでブラウザ確認できない

なぜ解決したのかいまいちピンと来てないが、解決できたので、覚書き。

### 前提

バックエンドをrails api、フロントエンドをreactにて WEBアプリ制作中に直面したエラーについて。

rails s でサーバー立ち上げてブラウザ確認しようと思いlocalhostにアクセスすると、アクセスできずにコンソールに以下のエラーが表示されていた。

“`
non-JS module files deprecated.
“`

### 経緯

そもそも docker compose upをしたときに、

「railsのgemがインストールされてないよ」

というエラーが出ていた。

そのため、docker compose run api bashにて手動でコンテナ内部でbundle installして無理やりrailsサーバーを立ち上げていた。

したがって、gemのインストール周りが原因なのだろうとは予想できていた。

### 実際のymlファイルの中身

docker-compose.ymlファイルの状態を確認してみると以下の状態。

“`
version: ‘3.9’

AWS, Terraform, Next.js(Typescript), Rails, Docker, Vercel, Github Actions, Firebaseを使用してポートフォリオを作成しました。

# 概要
同棲しているカップル専用の家計簿アプリを作りました。
レスポンシブ対応です。
現在開発中で全然完成していませんが、完成時期が見えないので一旦就職活動用にまとめました。

開発者のプロフィール情報、お問い合わせは[こちら](https://codeto.jp)からお願いします。

# サイト
こちらが開発したWebアプリのリンクです。
[Pairly(ペアリー) – 同棲カップル専用の家計簿アプリ](https://app.pairly.life/)

:::note alert
**注意**
現在開発中のためパートナー招待が使用できません。
投稿データの同期を確認されたい方は下記のテストアカウントをご利用ください。
:::

### テストユーザー1
【メールアドレス】tarou@test.com
【パスワード】123456

### テストユーザー2
【メールアドレス】hanako@test.com
【パスワード】123456

:::note info
テストユーザー1で投稿すると、テストユーザー2に同期されてデータを閲覧

RailsのRubyライブラリ自動読み込みについて | なぜrequireしなくても動くのか?

Railsでアプリを開発中、外部APIを叩く処理で[URIライブラリ](https://docs.ruby-lang.org/ja/latest/library/uri.html)を使用する場面がありました。

URIライブラリは[組み込みライブラリ](https://docs.ruby-lang.org/ja/3.1/library/_builtin.html)ではないので、コード内に`require ‘uri’`が必ず必要だと思っていたのですが、require無しでも動いたため、その理由について調べたことをまとめます。

## Rubyライブラリの種類

本題に入る前にRubyライブラリの種類について簡単に。

#### ①組み込み標準ライブラリ
– Ruby本体に組み込まれている。
– require を書かなくても使うことができる。
– 例)Array, Hash, String, Integer

#### ②組み込みではない標準ライブラリ(この記事で扱います)
– Ruby本体に付属している。
– インストール不要でコード内でrequireして使う。
– 例)Date,

Rails7のActive Recordを利用したデータの暗号化について

# 基本的な導入例
給与などを決定する評価テーブル(MySQL)を暗号化することを仮定します。

## テーブル設計
一旦暗号化のことを考えず以下のように作成したいテーブルの定義を考えます。
“`sql
CREATE TABLE `staff_evaluations`
(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘評価ID’,
`evaluation_rank` char(1) COMMENT ‘評価ランク(A,B,C,D)’,
`evaluation_reason` varchar(5000) COMMENT ‘評価理由’,
`monthly_income_up_amount` int(11) COMMENT ‘月収アップ額’,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
“`
上記において暗号化

rails-erd でテーブル名と関連だけのシンプルなER図を作る設定 #3452

# .erdconfig の 例

– テーブルのカラムを表示しない
– アプリケーションに関係ない Rails のデフォルトのテーブルは除外する
– 横方向のPDRだと見づらかったので縦方向の設定にした

“`
attributes:
– inheritance
exclude: ActiveRecord::SchemaMigration,ActiveRecord::InternalMetadata
filename: erd-simple
orientation: vertical

“`

# 公式

https://voormedia.github.io/rails-erd/customise.html

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

# Twitter

ApacheにRailsの動作環境を作る

## 環境
– Ubuntu20.4 + vagrant
– Apache2.4.41 + Passenger
– Ruby2.6
– Rails5.2

## はじめに
ApacheにRailsを動作させる環境を設定します。

## 設定

ApacheでRailsのプロジェクトを動かす元となるディレクトリを決める必要があります。Apacheではデフォルトで、Webアプリを/var/www配下に置くことになっています。しかし、必ずしもそこに置かないといけないといった決まりはありません。しかし、事実上、/var/www配下に置くことが暗黙の了解になっているようです。Railsのプロジェクトは任意のディレクトリで動作させることができます。/var/www配下で動かしたい場合は、/var/www配下にRailsのプロジェクトのシンボリックリンクを配置することで実現することができます。

– #### Railsのプロジェクトをルートにする場合

仮想ホストを設定するファイルを新規に作成した後、DocumentRootディレクティブで、Railsのプロジェクトのpublicのパスを指定します

[Hotwire] 数字を自動フォーマット

# はじめに

桁数が多い数字は桁数が合っているか判断しづらいです。判断しやすくするために、3桁区切りでカンマを入れます。自ら3桁区切りでカンマを入れることも可能ですが、それはやりたくないでしょう。

そこで、HotwireのStimulusを使って、数字が自動フォーマットされるようにしました。

![Sep-18-2023 22-34-39.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472392/ed28fa26-b220-9704-2373-6079432bf2e5.gif)

## 環境

– Rails 7.0.7
– Ruby 3.2.2

# 実装

ただ、数字をフォーマットすればいいだけに思いますが、実際は違います。データベースに保存する時にはカンマを取り除く必要があります。カンマがついた状態では、データベースで数値として扱えないからです。数値として扱えないと、年収が1,000,000円以上のユーザーを検索するのも難しくなります。数値として扱うために、データベースに保存する前に、数

Sidekiq Shoryuken Rescue Delayed_job
GitHubスター数 12.7k 2k 9.3k 4.8k