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

Rails関連のことを調べてみた
目次

データベースにアソシエーションを設定する

(dockerを使っているのでターミナルのコマンドにdockerが入っていたりします・・)

### generateコマンドを使ってBoardモデルを作成する
“`
rails g model Board user_id:integer title:string body:text
“`
データベースにusersテーブルを作るためのマイグレーションファイルと、Userモデルが作成される。

### マイグレーションファイルを編集する。
(空欄を許可しない設定を追加)
“`
class CreateBoards < ActiveRecord::Migration[7.0] def change create_table :boards do |t| t.integer :user_id t.string :title, null: false t.text :body, null: false t.timestamps end end end ``` ### マイグレーションを実行して、データベースにus

元記事を表示

「エンジニアDB」というサービスを開発しました!【Next.js / Rails / AWS / Terraform / Docker / GitHub Actions】

## はじめに
こんにちは! ひらぬま([@koocookooc](https://twitter.com/koocookooc))と申します。

今回、[Happiness Chain](https://happiness-chain.com/) の卒業課題として、
「[エンジニアDB](https://engineer-db.com/)」という、『〇〇なエンジニアを検索できるサービス』を開発したので、紹介します。

ターゲットは、エンジニアの皆さんに向けていますので、ご利用いただけると嬉しいです。

https://engineer-db.com/

無料でご利用頂けます。

### 自己紹介
大学(建築学)を卒業後、新卒で大手ハウスメーカーのIT事業部に入社しました。3年ほどITの企画、PM、設計、開発、テストなどを通して、ITのイロハを身につけました。

その後、より良いサービス・プロダクトを作れる人になるためには、開発サイドの経験もしておきたいなぁと思い、Web受託開発会社にエンジニアとして転職しました。今でちょうど2年目になります。

そんな筆者が開発した個人開発サービスを

元記事を表示

経過月数を小数点込みで確認したい(Ruby)

## あらまし
例えば退職された方が、その会社に何か月在籍していたのかを計算する際に「25ヶ月在籍してた」というのはとても簡単に計算出来るけど、日数まで含めて「24.67ヶ月在籍してた」という計算の仕方は意外とサンプルコードが転がっていないようです。

無ければ作れば良いという事で作成したので誰かの何かの役に立てれば。

## 考え方
年と月は簡単です。
上記の例では退職日と入社日の差分を取ったうえで”年”は12をかけて”月”と足すだけです。

“日”をどうやって小数点にするかですが、退職日から入社日の差分を取り、退職月の日数を取得して割り算をしています。(1月の場合は31日で割り、2024年2月の場合は29日で割ります)

これをせず雑に30で割ると、小数点以下が若干おかしな事になってしまいます。

……と思ってコード書いて完成したつもりでしたが見直してたらバグがありました。
2/2入社、2/29退職 0.97ヶ月 → OK
2/1入社、2/29退職 1.0ヶ月 → OK
1/31入社、2/29退職 0.93ヶ月 → NG (本来1.03になってほしい)

## 修正版 考え方
結構

元記事を表示

【Ruby on Rails 】undefined method `image_name’ for nil:NilClass

# 初めに

投稿一覧ページでそれぞれの投稿に紐付いているユーザ名や画像を表示できなかったので書きます。

# 問題

以下エラーに遭遇しました。

![スクリーンショット 2024-01-24 20.09.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536873/d6ec7692-41ee-d728-fef1-652a6d0f0b89.png)

# 解決方法

エラー文から推測して、この辺りを調査しました。

① Viewファイルの誤字脱字

② Postsコントローラーのindexアクション内でインスタントメソッドuserの定義忘れ

③ インスタントメソッドの理解不足

②まで調査して、インスタンスメソッドが何をしているのか理解できていなかったので復習しました。復習を終えて、③が原因ではないと分かりました。そこで、こちらの記事を参考にデータベース周りを調べました。

https://qiita.com/TeppeiMimachi/items/755639c775c72cb73ad9

元記事を表示

[devise] 退会済みユーザーをログインできないようにしてみた。[Rails]

# はじめに
devise.gem を用いた標準的なユーザー認証は、先人の方々がQiita等に記載してくださってあるのですが、「退会したユーザーはログイン不可にする」といった、divise 機能の上書きが必要な内容に関しては見当たらなかったので、備忘録も兼ねて記していきたいと思います!

devise.gem の導入などの基本的な部分に関しては、先輩方の分かりやすい記事が沢山転がっているので、割愛させていただきます。m(_ _)m

# 実装したいこと
①enum を用いたユーザーステータスの実装
②退会済みユーザーはログイン不可にする。

# 設計について
上記内容を説明する上で、土台となる設計部分です。

### User テーブル定義
Userテーブルには、説明のために基本的な内容としています。
statusカラムのデータ型が、integer型となっているのは、この後説明するenum を用いてユーザーステータスを定義するためです。

| カラム名 | 説明 | データ型 |
|:-:|:-:|:-:|
| ID | ユーザーID | integer |
| name |

元記事を表示

Railsで作られたWebサービスをElasticBeanstalkからECS on Fargateに移行した話し(全体概要)

# はじめに
医療系クラウドサービスを提供しているレイヤードという会社で働いています。

弊社で提供しているWeb問診システムSymviewはRuby on Railsに構築しており、2017年からElasticBeanstalk(以下EB)を利用してオーケストレーション及びDeploymentを管理しておりました。
EBの機能的にはそれなりに満足していたし、長年使っていて運用ノウハウも溜まっていたのですが、主に下記に記載の理由からECSに乗り換えることにしました。

:::note warn
本記事では完成形の移行にフォーカスして書いております。
アーキテクチャの選定や実装の試行錯誤、設定等の細かい話しは省いていますのでご了承ください。
:::

## 課題
– EBがサポートする **プラットフォームの更新が遅く、最新バージョンのRubyをなかなか利用出来ない**
– オートスケールやデプロイ時のEC2のプロビジョニングでライブラリのインストールが毎回実施されるため、ライブラリの配布サイトの状態(サイトダウン等)によってはダウンロード失敗等でプロビジョニングエラーが発生する

元記事を表示

(未経験)技術士1次試験の過去問演習アプリつくった [Rails API + Next.js]

## はじめに

はじめまして!
エンジニア転職を目指してプログラミングスクール[RUNTEQ](https://runteq.jp/)で学習中の[けーちゃん](https://twitter.com/mimi048599)と申します。
2023年1月より、**完全未経験**から**Ruby on Rails**を中心に学習し、この度、ポートフォリオとして「[技術士1次試験 基礎•適正科目 過去問ドリル](https://www.proengineer1exam.com/)」をリリースしたので、ご紹介させていただきます!

https://www.proengineer1exam.com/

## 注意事項

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

## 作成したアプリ
アプリ名: [技術士1次試験 基礎•適正科目 過去問ドリル](https://www.proengineer1exam.com/)

![opengraph-image.png](https

元記事を表示

LiveViewとRails HotWireの比較

[piacere](https://twitter.com/piacere_ex) です、ご覧いただいてありがとございます :bow:

下記コラムで、Rails 7に標準搭載されたHotWireを試しましたが、Elixir/PhoniexのLiveViewと比較してみたいと思います

https://qiita.com/piacerex/items/b9cd99e2e051d24ce180

# 方式

## a)部分ページロード/レンダリング

### LiveView

– MorphJSによるDOMの部分更新
– LiveView StreamsによるDOMの部分追加/更新/削除

### Rails

– Turbo Driveによるリンク操作のインターセプトとfetchへの置換、bodyタグ内のみの置換
– Turbo FramesによるDOMの部分更新
– Turbo StreamsによるDOMの部分追加/更新/削除

## b)サーバサイドのデータ更新をフロントに反映

### LiveView

WebSocketによるPub/sub

### Rails

WebS

元記事を表示

【Ruby on Rails】No route matches [GET] “/logout”

# 初めに

Rails7の環境でログアウト機能を実装していたときに、Rails5で書かれているProgateのプログラムで躓きました。

# 問題

ログアウト機能の実装でNo route matchesが起きました。

“`ruby
<%= link_to("ログアウト", "/logout", { method: "post" }) %>
“`

# 解決方法

ルーティーンの設定は問題ありませんでした。記事を参考にlink_toメソッドを修正したら、ログアウト機能が動きました。

“`ruby
<%= link_to "ログアウト", "/logout", data:{ turbo_method: :post } %>
“`

# 終わりに

バージョン違いによる仕様を理解できました。

元記事を表示

Draperの使い方:モデルがファットにならないようデコレーターを活用する

## gem draperをインストールする
gemfileにgemを記載
“`
gem ‘draper’
“`

bundle installする(下記はdocker使用の場合)
“`
docker compose run web bundle install
“`
システムにデコレーター層を追加
“`
rails generate draper:install
“`
デコレーターのファイルを追加
“`
rails generate decorator ○○(モデル名)
“`

## モデル名_decorator.rbにコードを書く
“`
lass UserDecorator < Draper::Decorator delegate_all def full_name "#{object.first_name} #{object.last_name}" end end ``` ## viewファイルに記述を加える ``` <%= current_user.decorate.full_name %>
“`

※サーバーの再起動を忘れずに・・

元記事を表示

stimulusを用いてテーブルのtdタグ全体をリンクにする方法

私は現在、未経験からのエンジニア転職に向けてプログラミングスクールで学習をしている、いしかわと申します。

現在PFを作成していますがテーブルを描写した際に、`stimulus`を用いてテーブルの子要素全体をリンクにした内容をアウトプットとしてこちらの記事にしました。
どなたかの参考になれば幸いです。

:::note warn
プログラミング初学者なので、内容に誤り等ある可能性があります
誤りがありましたら教えてくださると幸いです
:::

環境
ruby 3.2.2
rails on rails 7.0.8
stimulus 3.2.2
tailwindcss 3.3.6
daisyUI 3.9.6

# 実装
daisyUIの`tableクラス`を用いてテーブルを以下のように作成しています
“`html:HTML

<% @completed_requests.each_with_index do |request, index| %>

<%= index +

元記事を表示

【Rails】動的にDBのテーブルにカラムを追加してみる

どうもこんにちは。

今回は、動的にDBのテーブルにカラムを追加する方法をメモしていきます。

# 動的にカラムを追加とは?

本来であれば、DBのテーブルにカラムを追加する場合には、以下のような手順を踏むと思います。

1. マイグレーションファイル生成

“`sh
rails g migration AddNewColumnToSample
“`

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

“`ruby
class AddNewColumnToSample < ActiveRecord::Migration[7.0] def change # addcolumn :テーブル名, :カラム名, :データ型 add_column :samples, :new_column, :string end end ``` 3. マイグレーション実行 ```sh rails db:migrate ``` しかし、「custom_itemsテーブルにデータが登録された場合に、登録されたデータの名前でsamplesテーブルにカラムを追加したい」ということが出てきます。

元記事を表示

rubyXLのエクセル出力で部屋に属する所属毎にシートを分けてusersを書き込んでいく

## はじめに
開発で部屋に属する所属毎にシートを分けてエクセル出力する必要があり、ある程度実装ができたのでまとめる。
初学者やrubyXLでエクセル出力を実装しようとしている方々に少しでも参考にもなれば嬉しいのですが、
なんちゃってエンジニアによる自分のアウトプット用の投稿なので、よくないコードの書き方や、または分量的に省略している箇所もございますのでご了承をお願いします。
アドバイスがありましたらコメントを頂けますと幸いです。

## 出力フロー
roomの詳細ページから出力し、roomに紐づいているユーザー(users)を所属毎(affiliations)にシートを分けて用意してあるエクセルファイルに書き込んで出力します。
usersは中間テーブルのroom_usersを経由して取得します。

## テーブル構図
roomsテーブル(部屋)
|rooms|
|:–|
|id|
|name|

affiliationsテーブル(所属)
|affiliations|
|:–|
|id|
|name|

usersテーブル
|users|
|:–|
|id|
|name|
|af

元記事を表示

Rails APIエンドポイントの作成:基本操作

## **はじめに**
この記事では、Railsを使用して基本的なAPIエンドポイント(POST、PUT、GET、DELETE)を作成する方法をメモっぽく記載しておきます。

## **必要なもの**
– Ruby on Rails
– RESTful APIに関する基本的な理解

## **ステップ 1: Railsのセットアップ**
まずは、新しいRailsプロジェクトを作成する。ターミナルで以下のコマンドを実行

“`bash
rails new my_api_project –api
cd my_api_project
“`

このコマンドにより、API専用のRailsプロジェクトが作成される。

## **ステップ 2: モデルの作成**
今回はブログの記事を管理するための`Article`モデルを作成します。次のコマンドを実行

“`bash
rails generate model Article title:string body:text
rails db:migrate
“`

## **ステップ 3: コントローラの設定**
`Articles`コントロ

元記事を表示

rails g model と rails g migration の違い

# はじめに
`rails g model`と`rails g migration`の違いについて、なんとなくの理解しかできていなかったので備忘録としてまとめます。
# rails g modelとは
このコマンドは、新しいモデル(データベーステーブルの設計図)を作成します。モデルはデータベースのテーブルに対応し、アプリケーション内でのデータの取り扱いやロジックの管理に使用されます。
コマンドの記述方法は以下のようになります。
“`
$ rails g model モデル名 カラム名:データ型
“`
## 実行方法
例えば、以下のコマンドを実行すると、Userモデルに対応するデータベーステーブルを作成するマイグレーションファイルが生成されます。
“`
$ rails g model User name:string email:string
“`
続いて、このマイグレーションを実行して変更をデータベースに適用します。
“`
$ rails db:migrate
“`
# rails g migrationとは
このコマンドは、手動でマイグレーションファイルを生成します。主に

元記事を表示

ActiveHashの初期値を設定したらエラーメッセージが出てこなかった件

# はじめに
プログラミング初心者ですので、、温かく見守って頂けると幸いです。
何か間違っていたらコメントお願いします。
# エラーメッセージが出てこない
[![Image from Gyazo](https://i.gyazo.com/47e4958e4b02fbe12628de441de857c8.png)](https://gyazo.com/47e4958e4b02fbe12628de441de857c8)
ActiveHashを使用した入力フォームの初期値に上記のような初期値を設定していましたが、そうするとエラーメッセージが出ないという状況に陥りました。
しかも、初期値ではエラーメッセージ出ないのに、普通に項目を選択して保存しようとすると、”Category can’t be blank”というエラーが、、、(選択してるのに、、、)

# 解決
原因ははっきりしていませんが、修正した箇所としては、
idを0~から始めるのではなく1~から始めた。(上記の画像は修正後)
ビューのnew.html.erbの
**<%= f.collection_select(:category_i

元記事を表示

bootstrapのダウンロードの仕方

## gemをインストール
gemfileに以下を記載
“`
gem ‘bootstrap’, ‘~> 5.3.0’
“`

bundle installする(コンテナ内で行う場合)
“`
docker compose run web bundle install
“`
## 共通ファイル作成
flashメッセージは複数のビューファイルで使うので、部分テンプレートにしておく。
views/shared/_flash.html.erb
“`
<% flash.each do |message_type, message| %>

【Rails】選択画像のプレビューを動的に表示させる

画像のプレビュー機能をシンプルに書きたいと思い、JavaScriptのFileReaderで実装しました。メモとして残します。

# やりたいこと
1. input tyupe=”file”の`ファイルを選択`ボタンをクリックして画像ファイルを選択する。
1. プレビュー枠の画像が選択した画像に置きかわる。

# 実装環境
– Ruby on Rails
– Slim
– Carrier wave
– JavaScript

# 実装コード
必要なコードのみ抜粋します。

“`slim
/ form_withのコードの一部
label
= form.file_field :image, class: ‘d-none’, onchange: “previewImage(this, ‘previewImageField’)”
span.btn.btn-secondary ファイルを選択
= form.hidden_field :image_cache
/ プレビュー枠
– if hoge.image.present?
= image_t

元記事を表示

i18nによる日本語化対応【Rails】

docker環境で開発をしています。
Railsでデフォルトのロケール(言語)を設定するには、

## 1. config/application.rb ファイル内で config.i18n.default_locale を設定
“`
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join(‘config’, ‘locales’, ‘**’, ‘*.{rb,yml}’).to_s]
“`

## 2. Gemfileにi18nを記載→インストールする
“`
gem ‘rails-i18n’, ‘~> 7.0.0’
“`
“`
bundle install
“`

## 3. サーバーを再起動
“`
docker compose restart
“`

## 4. rails consoleで「I18n.t(‘date.abbr_day_names’)」と打ち、下記のように帰ってきたら設定完了。
“`
irb(main):001:0> I18n.t(‘date.abbr_

元記事を表示

Next.js(AppRouter)×RailsのAWS実行環境を、SSRを考慮して構築する【Terraform】

## 概要
Next.js(App Router)とRails APIで構成されるアプリケーションの実行環境を、AWSで構築する記事です。IaCにはTerraformを利用します。

構築する環境の構成図は以下に示す通りで、アプリの実行環境はECS/Fargateを利用しています。SeverComponentからRailsで実装したAPIを呼び出す際は、CloudMapによるサービスディスカバリを利用してコンテナ間で直接通信するようにしています。
![スクリーンショット 2024-01-21 15.15.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987556/80eafd5a-2e35-bf05-55b2-6464e2606b1e.png)

# ※注意点
この記事では、ECS/Fargate環境におけるISRの実現方法については触れていません。今回の構成で考慮しているのはSSR(cache: no-store)のみです。

ECS/

元記事を表示

OTHERカテゴリの最新記事