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

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

[個人開発・本リリース] 完全未経験が冷蔵庫の中身を簡単管理できるサービスをリリースした件

## はじめに

こんにちは。ryosuke([@ryousuke_mogurA](https://x.com/ryousuke_mogurA))と申します。現在プログラミングスクール RUNTEQ にて、Ruby on Rails を学習しています。

前回MVPリリースしたアプリを本リリースしたので新たな記事を書くことにしました。
技術的な部分での誤りやサービスについての感想などありましたら、コメント等で教えていただけると助かります。
## 目次
[1.作成したサービスの紹介](#サービスの紹介)
[2.作成した経緯](#作成した経緯)
[3.技術スタック](#技術スタック)
[4.こだわったポイント](#こだわったポイント)
[5.画面紹介](#画面紹介)
[6.ER図](#ER図)
[7.実装機能](#実装機能)
[8.今後の展開](#今後の展開)
[9.反省点](#反省点)
[10.感想](#感想)

## サービスの紹介
[![Image from Gyazo](https://i.gyazo.com/385a7078b695448cfef79567d7cd142b.jpg

元記事を表示

link_toメソッドで生成されるアイコンや文字にスタイルを適用する

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

## 書き方
“`
<%= link_to "sample", xxx_path, id: id番号 %>
“`
このようにID属性を作成することでCSSやjavascriptのスタイルを適用できる。

## どうしてidの番号を指定するのか
番号を指定しない場合、一覧など複数のボードがある時、複数のボードに同じIDが適用されることになるため。
原則、HTMLではIDはユニークであるべき。

元記事を表示

パーフェクトRubyonRails備忘録5

# ActiveJobによる非同期実行

– どういう時に使う?
– リクエストからレスポンスまで時間がかかりそうな時などに、レスポンスだけ返して処理は非同期で実行する
– ジョブの実装
– ジョブクラスの生成

“`bash
rails g job async_log
“`

– `app/jobs/async_log_job.rb` ファイルとテストファイルが作られる
– ジョブクラスの実装

“`ruby
class AsyncLogJob < ApplicationJob queue_as :default def perform(message: "hello") AsyncLog.create!(message: message) # 実行したい処理を書く end end ``` - ジョブをキューに入れる - ジョブの実行はバックエンドが担当する(ややこしや

元記事を表示

【Rails】button_to_functionが使用できない

## はじめに
Railsのアップデート中にbutton_to_functionを使用している箇所でエラーが出たので、その対応をまとめます。

## 問題
以下のように、button_to_functionを使用するとエラーがでます。
“`ruby
<%= button_to_function "ボタン", "clickButton()", {:class=> “button”} %>
“`

## 解決方法
button_to_functionはRails4.1で削除されました。
javascriptなどでボタンをクリックしたときのコードを実装します。
“`ruby
ボタン

$(document).ready(function() {
$(“#button”).click(function() {
clickButton();
});
})
“`

## 参考
https://www.techscore.com/tech/Ruby/rails-4.0/view/

元記事を表示

Shift_JISに変換する際に『 〜 』が化けちゃう【波ダッシュ・全角チルダ問題】

## 解決策
文字列をShift_JISに変換する際 “~”が消える事例に遭遇した人へ
下記のコードを付けよう

~~~ ruby
# 全角チルダを波ダッシュに変換
.gsub(‘~’, ‘〜’)
~~~

## 原因
上のインライン部分に書いてあるとおり、実は”**~**”と”**〜**”は違う文字

全角チルダ ” **~** “はShift_JISにエンコードする際バグってしまうみたい

https://www.tohoho-web.com/ex/dash-tilde.html

元記事を表示

binding.pryを使ったデバックの方法(Docker内で)

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

## 手順
1.gem ‘pry-byebug’をインストール
2.
“`
docker ps(コンテナIDを調べる)
“`
3.
“`
docker attach (CONTAINER ID)
“`
4.メソッド内に binding.pryを書く
5.ブラウザで確認したい画面を開く
6.ターミナルで値を確認する

## 終わらせ方
1.検証が終わったらexit
2.ctrl + (Pの後Q)
3.binding.pryをけす

元記事を表示

【Rails】テーブルを作り直すときのMigrationがややこしかった

## はじめに
本記事では、業務でテーブルを作り直したいときにややこしかったことについて紹介していきます。

## 背景
開発を行なっていた際に、過去作成されていたテーブル名が機能改修後の機能と意味合いがずれており、今後開発で触れる時にわかりづらいということでテーブル名を変更したいと考えました。

1. 既存のテーブルのテーブル名を変更したい
2. 既存のテーブルにはリレーション関係がある
a. 子テーブルのテーブル名も親テーブルと合わせて変更したい
b. primary_keyやforeign_keyも変更する必要がある

→ テーブルを作り直した方がわかりやすいということで、作り直すことになりました。

## ややこしかったところ
ややこしかったところは、下記で述べる「OldTableクラスとChildOfTableクラスをMigrationFileで定義しなくていけない理由はわかったけど、NewTableクラスとChildOfNewTableクラスは定義しなくていい」という点です。順を追って説明していきます。

以下のコードはレビューをいただく前のコードです。
`

元記事を表示

令和時代のRails アプリに database_cleaner は必要なのか

## はじめに

Rails アプリ開発でテスト環境の設定を行う際によく出てくるのものの一つに[database_cleaner]が挙げられます。

過去の Rails のテスト関連の本やネット記事を見ると[database_cleaner]を使うのが作法かのように説明するものが多いです。

しかしながら、中には「[database_cleaner]って要る?」と疑問を投げかけている人も少なからずいます。

https://anti-pattern.com/transactional-fixtures-in-rails

ん、どっち? 現代の Rails アプリに[database_cleaner] は必要なのでしょうか?
氣になったので調査してみました。

[database_cleaner]: https://github.com/DatabaseCleaner/database_cleaner

## 結論

Railsの標準機能`use_transactional_tests`(初期設定: `true`)を使えば、通常は[database_cleaner]が不要であることのよ

元記事を表示

ActiveAdminで、全てのチェックボックスを選択するチェックボックスを追加する

## 動機
[前回の記事](https://qiita.com/Erga-mion/items/5ba48dbeb10573dd70c2)では、ActiveAdminで、複数のレコードを関連づけるために、フォームにチェックボックスを追加していました。 その続きになります。

そこに、選択できるレコードの数が膨大になることが考えられるので、それらを全て選択できるチェックボックスを追加して欲しい、という要望がありました。

ActiveAdminのドキュメント等を確認しましたが、そういった機能は用意されていないようですので、JavaScriptで実装することにしました。(もしありましたらご指摘お願いします:bow:)
## 動作環境
– ruby 3.2.2
– rails 7.0.8
– activeadmin 2.14.0

## 実装
前回の記事のものと同じものになります。

`User` の作成・更新ページに、複数の`Book` を選択できるチェックボックスを追加しています。

“`mermaid
erDiagram
User ||–o{ BookReservation : u

元記事を表示

【Rails】Rails始めて2週間でよく使ったコマンド

こんにちは!
今回はRailsを始めて2週間でよく使ったコマンドを紹介したいと思います。
最後まで読んでいただけると嬉しいです!

# コマンド紹介
“` php
rails server
“`
説明: Railsアプリケーションをローカルで実行するためのコマンドです。http://localhost:3000でアプリケーションを確認できます。
“` php
rails generate scaffold [モデル名] [カラム名:型, …]
“`
説明: モデル、ビュー、コントローラなどの基本的なCRUD機能を一括で生成するコマンドです。開発初期によく使用します。
“` php
rails db:migrate
“`
説明: データベースのスキーマを最新の状態に更新するためのコマンドです。新しいマイグレーションファイルを適用します。
“` php
rails console
“`
説明: RailsアプリケーションのコンテキストでインタラクティブにRubyコードを実行できるコンソールです。モデルの操作やデバッグに便利です。
“` ph

元記事を表示

ActiveAdminで、多対多の関連付け(中間テーブル)レコードを追加する

ActiveAdminで1対多や多対多の関係のあるモデルでは、`has_many` メソッドを使うことで、多のモデルをもう一方のモデルのフォームで追加・更新できるようにできます。(https://activeadmin.info/5-forms.html)

本記事では、その`has_many`を使う方法と、もう一つ別のアプローチで、多対多のモデルを関連づける中間テーブルのレコードを作成・更新できるようにします。

ここでは、以下のようなモデル構成での実装を示します。
`User`のページで、`Book`との中間テーブルである、複数の`BookReservation`を作成・更新・削除できるようにします。
“`mermaid
erDiagram
User ||–o{ BookReservation : user_id
BookReservation o{–|| Book : book_id
“`

## 動作環境
– ruby 3.2.2
– rails 7.0.8
– activeadmin 2.14.0

## has_manyを使用する場合
### 画面
– 「Add N

元記事を表示

??と、?が二回並んでる場合

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

## 疑問に思ったメソッド
“`
def page_title(title = ”)
base_object = ‘aaaa’
title.present? ? “#{title} | #{base_object}” : base_object
end
“`

## 疑問に思ったこと
present?は存在するかどうかというメソッドだが、この二つ目の?は何か。
?を二つ並べることで別の意味を持つのか?

## 調べた結果
present?と?は別の意味を持つ。二つ?が並んでるので2つで意味を持つのかと思ったが、そういうわけではない。
二つ目の?は三項演算子。

**三項演算子とは**
if文の簡略化。簡単なif文ならこちらで省略した方がよい。
条件式? 真の場合 : 偽の場合

## 結論
“`
title.present? ? “#{title} | #{ba

元記事を表示

RailsのModelに定数を用意する

# 概要
* RailsのModelで定数を用意したかった
* そのメモ

# 結論

こうすればよい

“`ruby
class MyModel < ApplicationRecord MY_CONSTANT = '定数の値'.freeze end ``` # freezeについて 調べてる感じ、やった方が良さそう。下記ができちゃうので ```ruby class MyModel < ApplicationRecord MY_CONSTANT = '定数の値' end MyModel::MY_CONSTANT << '追加の値' # これができてしまう puts MyModel::MY_CONSTANT # => ‘定数の値追加の値’
“`

元記事を表示

rswagでAPI仕様書自動生成するときにindexアクションの扱いに困った

# 前提

[rswagの公式Doc](https://github.com/rswag/rswag?tab=readme-ov-file#getting-started)を見ながらAPI仕様書の自動作成に取り組んでいた時の話。
自動作成までの手順として、RSpecでAPIのテストを書いた後、ターミナルで`RAILS_ENV=test rake rswag:specs:swaggerize`を実行する。
すると、`swagger/v1/swagger.yaml` が自動で作成されて、`api-docs/index.html` にアクセスするとswaggerのAPIDocが確認できる。

# うまく行ったこと

createアクションはドキュメント通りに以下のようなテストを作った。(ユーザーに関するAPI)

“`ruby: users_spec.rb
require ‘swagger_helper’

RSpec.describe ‘api/v1/users’, type: :request do
path ‘/api/v1/users’ do
post(‘create

元記事を表示

RubyのREPLとデバッグ:初心者から見たツールの進化と効率化

> Rubyの初心者として、最近私はRubyのREPL(Read-Eval-Print Loop)ツールとデバッグ機能について深く探求しました。この過程は、Rubyへの理解を深めただけでなく、ツールの進化と開発効率の関係について考えさせられる機会となりました。

### RubyのREPLツール:IRBからPryへ
Ruby公式が提供するIRB(Interactive Ruby)は強力なREPLツールですが、コミュニティ主導の需要により、Pryのようなさらに高機能なツールが生まれました。Pryはコード探索、コンテキストナビゲーション、リアルタイム編集など、より高度な機能を提供しています。

例えば、Pryを使用すると、クラスやメソッドの定義を簡単に確認できます:

“`ruby
[3] pry(main)> show-source Array#map

From: array.c (C Method):
Owner: Array
Visibility: public
Number of lines: 17

static VALUE
rb_ary_map(VALUE ary)
{

元記事を表示

パーフェクトRubyonRails備忘録4

# RackとRailsの関係

– Rackとは
– Webアプリケーションサーバ(Puma, Unicorn)とWebアプリケーションフレームワーク間のインターフェイスを共通化した仕様であり、実装となるライブラリである。
– RailsがPuma上で動作しているのもRackのおかげ
– Rackとフレームワークの間で機能するRackミドルウェアという機構を持つので、処理を挟むことができる。
– Rackに必要なインターフェイス
– callメソッドを定義する
– callメソッドは、envもしくはenvironmentと命名する引数を一つ受け取る
– callメソッドは次の値を配列で返さなければならない
– HTTPステータスコードを表す**数値オブジェクト**
– HTTPヘッダーを表す**ハッシュオブジェクト**
– レスポンスボディとなる文字列を含んだ**配列風オブジェクト**
– 例

“`ruby
class App

元記事を表示

マイグレーションファイルを作成してもschema.rbファイルが更新されない時の対応

初めまして2litrewtと申します。
ruby on railsの学習中に起きた問題とその解決法について説明していきます。

# マイグレーションファイルを作成してもschema.rbファイルが更新されない時の対応

  
学習中にマイグレーションファイルを作成しました。
(dockerを利用しているので文頭にdocker compose run webをつけています。)
“`terminal
docker compose run web rails generate migration CreatePosts title:string body:text user:references
“`

実行はできたのですがschema.rbファイルには生成したテーブルの情報は記載されず…

“`schema.rb
ActiveRecord::Schema[7.0].define(version: 2024_08_17_090454) do

enable_extension “plpgsql”

create_ta

元記事を表示

環境変数の導入方法

# はじめに
現在友人依頼のアプリケーション作成中です
環境変数の導入方法毎度忘れてしまうので、メモしておきます!

# 環境変数とは
OSが持つ変数のことです
APIの秘密鍵などGitHubにあげたくない情報を、情報漏洩を防ぐために利用されます
環境変数を管理することができるgem「dotenv-rails」を使用していきたいと思います

# dotenv-railsを導入
Gemfileに追記する

“`Gemfile.
:
gem ‘dotenv-rails’
“`
bundle installを実行し、envファイルを作成

“`
$ bundle install
$ touch .env
“`

# 環境変数の設定方法

設定したい環境変数をenvファイルに入力します

“`.env
ADMIN_EMAIL=”任意のemailを入力”
ADMIN_PASSWORD=”任意のパスワードを入力”
“`

今回はseedファイルで環境変数を呼び出します

“`seeds.rb
# Admin データの作成
Admin.find_or_create_by!(em

元記事を表示

パーフェクトRubyonRails備忘録3

# レンダリング

– コントローラ内でレンダリングする方法で一番シンプル
– renderを使う

“`ruby
class BooksController < ApplicationController def show # app/views/books/show.html.erbを表示しようとする render :show end ``` - renderの場合は省略しても、render アクション名と解釈される。 - 表示を分ける - respond_toを使う ```ruby class BooksController < ApplicationController def show respond_to do |format| # 通常のアクセス GET /books/1 # render :show, format: :htmlと同じ意味

元記事を表示

はじめてのRuby On Railsチュートリアル

## Ruby on Railsマスターへの道:30章で学ぶWeb開発の全て

こんにちは、Railsエンジニアの皆さん!今回は、Ruby on Railsの基礎から応用まで、30章に渡って詳しく解説していきます。

各章にはサンプルコードも含まれていますので、ぜひ手を動かしながら学んでいきましょう。

## 第1章: Railsのインストールと初めてのアプリケーション

まずはRailsをインストールし、最初のアプリケーションを作成します。

“`ruby
# Railsのインストール
gem install rails

# 新しいアプリケーションの作成
rails new my_first_app
cd my_first_app

# サーバーの起動
rails server
“`

## 第2章: モデルの作成

データベースとの連携を行うモデルを作成します。

“`ruby
rails generate model User name:string email:string
rails db:migrate
“`

## 第3章: コントローラーの実装

ユーザーから

元記事を表示

OTHERカテゴリの最新記事