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

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

Rails 入力した値をその通り保存できなかった時に、ログを確認して学んだこと!

## バージョン
– ruby 3.2.2
– Rails 6.1.7.6
————————-

スクールの課題でタスク管理アプリを作成中、先に`name`と`content`のカラムを作ってあり、後で、`timelimit`(終了期限)のカラムを追加した。後からカラムを追加すると、既に保存してあるデータベースについては、後から追加したカラムの値が`nil`となってしまいエラーになってしまうので、デフォルト値を設定した。
### しかし、新規投稿しても、終了期限が、デフォルト値で設定してある「今日」になって登録されてしまう!!なぜだ!!

![スクリーンショット 2023-12-01 10.32.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3566175/9e18e723-f2dd-7fab-16c1-9d5304bf224d.png)

`schema.rb` の中身はこんな感じ↓
“`schema.rb
create_table “tasks”, for

元記事を表示

Rails アプリの webpacker を shakapacker に移行した

[webpacker]:https://github.com/rails/webpacker
[shakapacker]:https://github.com/shakacode/shakapacker
[webpack]:https://webpack.js.org/

[ツクリンク プロダクト部 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/tsukulink) の2日目です。

# 概要

[webpacker][webpacker] はもうメンテナンスされないので [shakapacker][shakapacker] に移行した。手順通りやればうまくいくけど、ハマったポイントもある。

# [webpacker][webpacker] はもうメンテされない

> Webpacker has been retired 🌅

[webpacker READMEより][webpacker]

[webpacker][webpacker] はもうメンテナンスされません。最後のコミットから1年くらい経っていて、

元記事を表示

Rails6 で動的なセレクトボックスを作りたい(JQuery編)

## この投稿は、
DMM WEBCAMP Advent Calendar 2023
シリーズ2 投稿2日目のエントリーです。

1日目は @yuki82511988 さんで
[【Ruby】+ と<<で配列の要素を追加した時の話](https://qiita.com/yuki82511988/items/496e69158086bbe2c33c)でした。 Rubyは詳しければ詳しい程幸せになれますね。 ## はじめに DMM WEBCAMP でメンターをやらせていただいております。 @tomoaki-kimura です。 Rails7のリリースから随分経ちますが、Rails6の環境もまだまだあります。 ということで、今年の寄稿はRails6で改めて動的なフォームの処理に触れてみたいと思います。 ## 環境 - Ruby 3.1.2 - Rails 6.1.4 - yarn 1.22.18 ## 作るもの [![Image from Gyazo](https://i.gyazo.com/68f2fe8778990ddf75eed13579d57419.png)](http

元記事を表示

RailsアプリをCloud Runにデプロイする最短手順 2023

株式会社エイチームフィナジーの@okonomiです。
この記事は[Ateam Finergy Inc. × Ateam Wellness Inc. Advent Calendar 2023](https://qiita.com/advent-calendar/2023/ateam-finergy-wellness)の2日目の投稿です。

普段の業務ではCloud RunにRailsアプリをデプロイして運用しています。
検証のためにテストアプリを作ってCloud Runにデプロイすることがときどきあって、毎回調べながらやってる気がするので最低限の手順をまとめておこうと思います。

今後のアップデートで手順が変わるかもしれないので2023年版としています。

:::note warn
今回デプロイするアプリは手順をシンプルにするためアクセス制限を設けていません。URLが分かれば誰でもアクセスできます。公開してはいけない情報を含めないようにしてください。
:::

# 環境など

いずれも記事作成時点での最新バージョンです。

– Ruby 3.2.2
– Rails 7.1.2
– Goo

元記事を表示

FormObject 複雑な検索機能のカプセル化

## はじめに
チーム開発で学んだことや、アプリ開発を通して調べたこと、実装手順、またプログラミングスクールで学習した内容をまとめています。

今回は、複雑な検索機能を実装する際にFormObjectについて調べたことをまとめます。

# FormObjectとは
FormObjectとは、`form_with`のmodelオプションにActive Record以外のオブジェクトを渡すためのデザインパターンです。このパターンは、データベースと直接関係のないフォームや複数のモデルを扱うフォームを作成する際に、処理をすっきりと記述することができます。

# FormObjectにおけるカプセル化とは
フォームに関連するデータとロジックを一箇所にまとめて記述することでコードを効果的に管理し、アプリケーション全体の構造とコードの品質を向上させることができる重要な手法です。これにより、より維持しやすく、拡張しやすいコードを書くことができます。

## メリット

説明

【Ruby on Rails】Railsをdocker-composeで動かすときのミニマムな構成

# まえがき

本記事は、**[DMM WEBCAMP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/infratop)** 2日目記事です。

Ruby on Railsを中心に、DWCメンター・卒業生が記事を投稿しておりますので、是非他の記事もご確認ください!

# はじめに

こんにちは、DMM WEBCAMP メンターの @ukwhatn です。

私は業務/プライベートの双方でRailsを書いているのですが、
特にRails7について、Docker(docker compose)で動かすための構成を調べてもあまり情報がなく、頭を抱えたことが何度かあります。

テンプレートリポジトリとしてRyan Williamsさんの[rails7-on-docker](https://github.com/ryanwi/rails7-on-docker)などはありますが、全部盛りすぎて少々使いにくい部分も….

そこで今回は、私が個人的に構築したRails7をDockerで動かすためのテンプレートリポジトリを紹

【Rails7】Hotwireでアプリ作り

# はじめに

【Rails】DBのdate型とdatetime型を型変更したときの値の変化

# はじめに
Ruby on Railsの開発では、日付や時間情報を扱う際に、データベースにdate型やdatetime型を使うことが多いです。
その時に、date型からdatetime型、datetime型からdate型に型変更したときにタイムゾーンによって値がどのように変更されるのかを残します。

# 前提
– Ruby on Rails:7.0
– PostgreSQL:14.9 (MySQLでも同様の結果になると予想されます)
– **アプリケーション側(Rails)のタイムゾーンはJSTで、DBサーバ(PostgreSQL)のタイムゾーンはUTC**

# カラムの型をdate型からdatetime型に変更する
DBのカラムの型をdate型からdatetime型に変更すると、どうなるのでしょうか。

今回は例として、ユーザの誕生日に時間情報を追加したいと思います。(自分の誕生時間を知ってる人がいるかは置いておきます)

usersテーブルとbirthdayカラムを作成します。
“`
create_table :users do |t|
t.date :birthda

【Rails】ActiveStorageでvariantを行うと画像が表示されない問題を解決する

現象としてlocalhost:3000/items/:idで実装している機能の動作確認を行っていたところ、variantを指定して表示したいんだけど非表示になってしまっていた。
![スクリーンショット 2023-11-26 22.45.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2532739/02837960-4253-4832-af62-f6132dcee2ab.png)

# 原因:minimagickを明示的に指定していなかった

Gemfile.lockを確認するとmini_magickがちゃんとインストールされていることがわかりました。

問題はvariantを利用するためにmini_magickを明示的に指定していないことが問題なようです。

参考URL

[https://zenn.dev/iloveomelette/articles/76aad4d9ce86d1](https://zenn.dev/iloveomelette/articles/76aad4d9ce86d1)

Rails フラッシュメッセージの表示

## はじめに
RUNTEQへ入学して2ヶ月の学習者です。何かあった際、コメントもらえると助かります!
## 1.なぜこの記事を作ろうと思ったか
何気なく使っていたが、flashが何なのかと疑問に思った、flashの中身が気になった為。
## 2.環境
– ruby 3.2.2
– Rails 7.1.2
## 3.フラッシュメッセージとは
リクエスト毎にクリアされる仕組みがある。使用しているユーザーへ向けて、何かアクション後、一時的にメッセージを表示させたい時に使用する。一時的に表示させるというのが重要。
## 4.前準備
以下のように作成。コードを見やすく、シンプルにしたくて最低限のものを記述。
“`ruby:マイグレーションファイル
class CreateUsers < ActiveRecord::Migration[7.1] def change create_table :users do |t| t.string :name, null: false t.timestamps end end end ``` ```rub

stimulus-rails gemを読み解く

# はじめに

私は、RailsでWebアプリを開発しているプログラマーです。
Webアプリで、インタラクティブな使用感を出したい時は、Hotwireを使っています。
Hotwireとは、レスポンスのHTMLでインタラクティブな使用感を実現するアプローチです。
このアプローチの実現は、TurboとStimulusによりできます。

Turboは、HTTPリクエストを自然に呼ぶだけで画面をインタラクティブに変更できるように設計されたライブラリです。
Stimulusは、HTMLを拡張するように設計されたJavaScriptフレームワークです。

どちらも違和感なく使えています。
これは開発者の設計が良いからでしょう。

このような使い勝手が良いものは、どのように作られているのだろうか?
気になったので、コードを1から読み解いていくことにしました。

RailsでStimulusを使いやすいようにするgemがあります。
手始めに、そのgemのコードを1から読み解きます。

# stimulus-rails gem

[stimulus-rails](https://github.com/h

【Rails】Renderにデータベースをデプロイした時のエラー解消

# 概要
Railsチュートリアルの第10章を進めていた時、
データベースのマイグレーションの設定をRenderにデプロイしたときにビルドエラーが発生しました。
“`
rails aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your ‘production’ database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1

Tasks: TOP => db:migrate:reset => db:drop => db:check_protected_environments
(See full trace by running task with –trace)
==> Build failed 😞
“`

#

[Rails] fixtureが読み込まれない問題

## まず結論から

`setup`でfixtureを使う時は、`teardown`でfixtureのキャッシュを消しましょう。

## fixtureが読み込まれない現象
まずは問題のあるコードを掲載します。`SecondTest`の`some test 2`テストを見てください。`TableClass`のテーブルにfixtureデータが入っていません。

“`ruby
require ‘test_helper’

class FirstTest < ActiveSupport::TestCase setup do fixture_directory = '' fixture_files = [:tbl] fixture_models = { tbl: TableClass } ActiveRecord::FixtureSet.create_fixtures(fixture_directory, fixture_files, fixture_models, DBClass) end test

ChatGPTとGitHubCopilotを導入してみての感想

# はじめに
今回、Progakuのアドベントカレンダー初日の記事を担当しました。

Prgakuというプログラミング学習コミュニティに関しては下記を参照してください。

https://note.com/tokuyuuuuuu/n/nd5d777751b60

2023年もそろそろ終わりを迎えようとしていますが、僕が今年一番業務上で大きく変化があったのがChatGPTやGitHubCopilotというツールの使用し始めたことです。

まだまだ自分も使い始めたところで探り探りな状態ですが、自分の普段の使い方を記していきます。

# ChatGPTについて

ChatGPTに関してはおそらく既に多くの方が使っているかと思います。

自分は先月課金し始めましたが、僕自身使用率が高いわけでは無いので無料でも良いかなっと思っています。

使い方としては、

### 1.コードのリファクタリング

「なんかしっくりこないな」とか「もう少し良い書き方出来そう」ってコードが出来た時に、コードを載せてリファクタリングしてもらうように依頼しています。

### 2.エラーの解決

***「ググる」とい

【Rails】どちらか一方のデータ(カラム)のみを入力必須にするバリデーション

Railsアプリケーションの開発中、「2つのデータ(カラム)のうち、どちらか片方のみの入力でないと保存できない」というバリデーションを付与したい場面がありました。

この条件は、「携帯電話番号か(自宅などの)固定電話番号のうち、どちらか一方だけの入力が必須」といった場面でよく見かける/実装が必要になる、かと思われます。

そこで、本記事では「2つのデータ(カラム)のうち、どちらか一方のデータのみが入力されれば保存される」=「2つのデータ両方が入力された場合は保存されない」という、二者択一入力必須条件を付与するためのRailsでの実装手順をまとめました。

Railsアプリ内の機能に二者択一入力必須条件をつける解説をおこなうにあたって、「開発環境」と「具体的な記述内容」「実装のポイント」の3つをまとめました。

## 開発環境

| Category | Version |
| :—————–: | :—–: |
| Ruby | 3.

Rails7×Svelte でWebアプリ開発 part1 (環境設定、簡単な表示まで)

# はじめに

Svelte というフロントエンドフレームワークはご存じでしょうか? 
Rails7からはTurboなどHotwireからJavaScriptを描かずともモダンなSPA風なページも作れるようにもなりましたね

個人的にフロントエンドフレームワークとしてReactは好きですし、他にもVue.jsなどは有名ですね!

https://2022.stateofjs.com/ja-JP/libraries/front-end-frameworks/

そんなフロントエンドフレームワークの最近のトレンドを見てみると…
いろいろな分野で上位に来ている「Svelte」 

今回はこちらについて紹介とRailsと組み合わせてWebアプリを開発してみた記録を書かせていただきます

# Svelte についての紹介

https://svelte.jp/

– 読み方は「すべると」 みたいです
– コンパイラで仮想DOMは使用しない
– Reactなどは仮想DOMを使用している
– ビルド時にアプリの変更箇所を探す

# Svelteを使ってRailsアプリを開発してみ

Dịch vụ đáo rút thẻ tín dụng Bình Thạnh

https://quatangchosuckhoe.net/rut-tien-the-tin-dung-quan-binh-thanh

Rút tiền thẻ tín dụng quận Bình Thạnh ngày nay đã trở nên phổ biến rất nhiều.Với hình thức rút tiền thẻ tín dụng quận Bình Thạnh mở rộng lại càng đem về lợi thế.

【Ruby】+ と<<で配列の要素を追加した時の話

https://qiita.com/advent-calendar/2023/infratop

シリーズ2の1日目です!卒業生とメンターさんがコラボして書いています📝

まずは、これを見てください。

“`rb:sample.rb
numbers = [1,2,3]
numbers += [4]

p numbers # [1, 2, 3, 4]
“`

“`rb:another_sample.rb
numbers = [1,2,3]
numbers << [4] p numbers # [1, 2, 3, 4] ``` 一見、配列に要素を追加しただけに見えます。 しかし、[Object#freeze](https://docs.ruby-lang.org/ja/latest/method/Object/i/freeze.html)を使ってみると以下のような違いが出てきます。 ```rb:freeze_sample.rb numbers = [1,2,3] numbers.freeze # numbers << [4] # can't modify frozen Ar

初めてのNext.js×Railsハンズオン

# はじめに
DMM WEBCAMP Advent Calendar 2023の1日目担当のみずたです、よろしくお願いします!🎁🎅🎄

# 今回作るもの

CRUDのRとD(ReadとDestroy)のあるアプリをNext.jsとRailsを用いてハンズオン形式で作ります。CとU(CreateとUpdate)はぜひ自分で機能追加してみてください。
※解説すると長くなる部分は解説を省略するので、不明な部分はご自身で検索等をお願いしますmm
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2729380/861dff7d-e870-d54c-3cea-5465b564fc6c.gif)

ハンズオンの完成コード↓
https://github.com/mizuta61/frontend_sample
https://github.com/mizuta61/backend_sample

# 記事対象者
– フロント(Next.js)とバック(Rails)を分け

【Rails7】jsbundling-railsを用いたモジュールバンドラーの比較

# はじめに
**Rails7系**から`Webpacker`が非推奨になり、`importmap-rails`や`jsbundling-rails`で`JavaScript`を管理するようになりました。今回は`jsbundling-rails`を用いたモジュールバンドラーの比較を少しまとめてみました。

# jsbundling-railsとは
`jsbundling-rails` は、`Webpack` や `esbuild`、`rollup` といったモジュールバンドラーの使用をサポートする Gemです。

# 比較

| | esbuild | rollup | webpack |
|—|—|—|—|
| ビルド速度 | 高速 | 低速 | 低速 |
| CommonJSモジュール対応 | ○ | △(要プラグイン) | ○ |
| ES6対応 | ○ | ○ | △(要Babel) |
| TypeScriptのトランスパイル | ○ | △(要プラグイン) | △(要プラグイン) |
| JSX構文のトランスパイル | ○ | △(要プラグイン) | △