- 1. rails永続的なセッション
- 2. [Rails7]submitにつけるdisable_withオプションについて
- 3. ActiveHash
- 4. 最終課題を終えて
- 5. [Rails入門] 初めてのRails(GitHub)
- 6. flatpickrを使ってみる
- 7. Rails ポートフォリオにGoogleMap APIを導入 複数の住所を表示
- 8. 【個人開発】手紙でリレー小説できるアプリ「言の葉つづり」を作りました【Next.js×Rails】
- 9. 多対多のマイグレーションファイルの用意
- 10. 実務未経験の初心者がRailsを学習してみた
- 11. Ruby エイリアスメソッド
- 12. RailsでGitHubActions(CI)を導入してみた
- 13. Docked Rails CLI With PostgreSQLでRailsコマンドをDocker化する
- 14. DockerのHealthCheckでコンテナの実行順序を制御する。
- 15. 基礎知識④Active Recordについて
- 16. 【個人開発】Rails×ReactのアプリでGoogleログインを実装しました(devise使わないパターン)
- 17. ゼロから始めるstimulus入門5(外部リソースとの連携)
- 18. enumとバルクインサートを使用した通知機能実装
- 19. [Rails] rails db:migrateが失敗したら、スキーマファイルからデータベースを構築しよう
- 20. Web API 混在の Rails アプリケーションで500エラーを適切に処理したい
rails永続的なセッション
# 概要
railsを勉強している時に永続的なセッションを作成するのに
便利なメソッドがあったので記録として残します。# 実際のコード
“`.rb
cookies[:remember_token] = { value: remember_token,
expires: 20.years.from_now.utc }
“`
上記は20年後期限切れになる記憶トークンです。
これをメゾットを使うことで
“`.rb
cookies.permanent[:remember_token] = remember_token
“`
のように書くことができます。
[Rails7]submitにつけるdisable_withオプションについて
## はじめに
Rails7以前までは[[Rails]submitタグにつけておきたいdisable_withオプション](https://qiita.com/sue738/items/09f569bdc3a73d26df88)の記事にあるように、data属性に`disable_with`を付与すれば、二重送信が防止できておりました。
“`slim
= form_with(model: model) do |form|
= form.submit ‘登録’, { data: { disable_with: ‘登録中・・・’ }
“`ですが、Rails7移行では、`disable_with`オプションが機能しなくなっているので、どのように実現したかを残しておきます。
## どう変わったのか
[Rails 7.0 + Ruby 3.1でゼロからアプリを作ってみたときにハマったところあれこれ
](https://qiita.com/jnchito/items/5c41a7031404c313da1f#disable_with%E3%81%AE%E6%8C%87%E5%AE
ActiveHash
# ActiveHashとは
カテゴリー名などの、変更される予定の無いデータをモデルファイルに記入することで、データベースに保存することなくActiveRecordのようなメソッドを使用することができるようにするGemのことです。# なぜActiveHashを使用するのか
ActiveHashを使用する理由は、データベースへのクエリと比較すると負荷が小さく、アプリケーションのパフォーマンスへの影響が少ないと考えられるからです。ActiveHashを使用した場合データはメモリ上に保存され、データベースに保存するよりも、高速でデータの取得を行うことができます。
# インストール方法
Gemfileの最下部に以下の内容を追加します。
“` :Gemfile
gem ‘active_hash’
“`
ターミナルで実行します。
“`
bundle install
“`# 使用方法
ActiveHashを使用するために、まずはモデルを作成します。(今回はCategoryモデル)
“`
rails g model category
“`
ActiveHash::Base
最終課題を終えて
2024年2月からプログラミングオンラインスクールに入学し早4ヵ月。
PCを購入するところから:sweat_smile:始まり、ようやく最終課題のフリマアプリを完成できたので全体を通して振り返りや今後についてまとめたいと思います。#### きっかけ
プログラミングを習おうと思ったきっかけは現職(美容師)であと何年働けばいいんだろう・・・?という不安からでした。
一人息子を一人で育てる親として、現職では収入も時間も満足に確保できないと考えていました。#### なぜプログラミング?
これは単純に憧れです:flushed:
現場で立ち仕事、カラー材でシャツは汚れ、手は荒れ、長時間労働している美容師からすると(スマートに仕事をこなす美容師さんもいます!あくまで私の現状です:pray_tone1:)、
PCカタカタ(カッコいい!)、リモートワークで家事育児仕事をこなせる仕事って魅力的過ぎました!
また、淡々と同じスタイルを100回切ってようやく1スタイル身につけたり、毎日何十人・月何百人の初めましてのお客様と約2時間マンツーマン対応する臨機応変能力は、プログラミング初心者に必要な探求心・
[Rails入門] 初めてのRails(GitHub)
最近Ruby on RAilsのチュートリアルに挑戦している初心者の自分が、初心者に向けての記事です。
今回はGitHubにプッシュするまでの流れを解説します。初めてGitHubを使う方向けに、Gitの基本的な操作も含めて説明します。# gitの初期設定
まずはユーザー設定。これは1度しちゃえばOK‼️
“`
$ git config –global user.name <自分の姓名(ローマ字)>
$ git config –global user.email <自分のメールアドレス(your.email@example.comなど)>
“`
今後自分が行うプロジェクトの変更を、自分の「名前」や「メールアドレス」で調べられるようになります。この設定は、Gitで共同作業を行う場合に特に役立ちます。# GitHubアカウントの作成
[GitHub公式サイト](GitHubアカウントに登録(サインアップ))でGitHubアカウントに登録(サインアップ)しましょう。# Gitリポジトリの初期化
作成したRailsアプリケーションをGitで管理するために、リポジトリを初期化し
flatpickrを使ってみる
# はじめに
これは、案件でrailsデフォルトのdatetime_fieldが利用されていたが、使いづらかったのでそれを作り替えた作業禄です。# 改修前
“`haml
公開開始日時
= f.datetime_field :open_at, class: ‘input input-bordered rounded-lg’
“`![l_6814799_122_2be594269a33f1091cc5306cc6458569.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632357/98128b2d-23e0-a8d7-1e3c-f4ac54483fde.png)
日付はカレンダーで設定が可能なのに、時間はマウスオーバーして時間を設定しなおさなければいけないのが使いづらかったのです。
# 実装
“`bash
yarn add flatpickr
“`“`js:app/javascript/controllers/flatpickr_controller.js
i
Rails ポートフォリオにGoogleMap APIを導入 複数の住所を表示
# はじめに
ポートフォリオにGoogleMap APIを導入しました
一つの投稿に複数の住所が登録されている可能性があるため
複数の住所が表示できるように実装しました!
アウトプットします✍️※旅行やデートのプランを共有するアプリなので、投稿機能はPostではなくPlanを使用しています!
また、Plansの子要素としてPlanDetailsモデルがあり、そこにaddressカラムがあります!# GoogleMap APIキーとGeocodingAPIを取得
導入手順は割愛させていただきます!
こちらの記事に詳しく手順が紹介されていましたので、
ご確認ください!https://qiita.com/nagase_toya/items/e49977efb686ed05eadb
https://qiita.com/mattan5271/items/1b784dbbe5f1c336ac70
# ER図
![スクリーンショット 2024-06-17 21.15.41.png](https://qiita-image-store.s3.ap-northeast-1.amazon
【個人開発】手紙でリレー小説できるアプリ「言の葉つづり」を作りました【Next.js×Rails】
# はじめに
はじめましてこんにちは、とぴ([@topi](https://x.com/topi_log))と申します。
オンラインプログラミングスクールにてRuby on Railsをメインに学習しつつ、自主学習としてフロントエンドも勉強しています。
(という序文を見るのが2回目以上の人はありがとうございます。)
3/30に公開したリレー小説アプリ「言の葉つむぎ」の第2弾として6/15に「言の葉つづり」を公開しました。
「言の葉つむぎ」については下記記事にありますのでよろしければご覧くださいませ。https://qiita.com/topi_log/items/3ef541d490ee4c332752
今回作成したアプリの紹介、技術、感想をまとめさせていただきます。
どうぞよろしくお願いいたします。# 目次
1.作成経緯
2.Webアプリの紹介
3.技術スタック
4.「言の葉つむぎ」からの変更点
5.こだわったところ
6.反省点
7.感想# 1.作成経緯
「言の葉つむぎ」でいただいたフィードバックを元に、改めてアプリを作りたいと考えていました。
しばらくスクールの卒業制
多対多のマイグレーションファイルの用意
# 概要
– ちょっとハマった# 内容
こんな感じの要件を満たすためにマイグレーションファイルを用意した
– 既存モデルA
– 追加モデルB
– AとBの中間テーブル“`ruby
class CreateModelB < ActiveRecord::Migration[6.0] def change create_table :model_b, id: :bigint, unsigned: true do |t| t.integer :xxx, null: false, default: 0 t.integer :yyy, null: false, default: 0 t.timestamps end end end ``` ```ruby class CreateModelAModelB < ActiveRecord::Migration[6.0] def change create_table :model_a_model_b, id: :bigint, unsigned: true
実務未経験の初心者がRailsを学習してみた
# ① はじめに
初投稿になります🌷
IT業界に未経験で転職して約1週間が経過し、
元々HTML/CSSの知識がごく僅かしかない私が、Ruby on Railsを学習してみました。
特に重要だなと思ったところや、自分の中で引っかかったところを中心にアウトプットしていきます!# ② 使用した教材
今回はudemyの、
[はじめてのRuby on Rails入門-RubyとRailsを基礎から学びウェブアプリケーションをネットに公開しよう](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/?couponCode=KEEPLEARNING) を使って勉強しました。![スクリーンショット 2024-06-10 13.29.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812430/7b404efc-7a79-8e27-f512-3662d2b67786.png)
Ruby エイリアスメソッド
# エイリアスメソッドについて
Rubyには全く同じ機能でありながら異なる名前のメソッドが複数存在します。これらのメソッドのことをエイリアスメソッドと呼びます。
可読性向上やプログラマーの好みによって使い分けられています。(メソッドによっては派閥がわかれているとか…)以下にエイリアスメソッドの一例を記載します。
# エイリアスメソッド一覧
## Array クラス
– `map` と `collect`
– `size` と `length`
– `slice` と `[]`
– `append` と `push`
– `prepend` と `unshift`## Hash クラス
– `store` と `[]=`
– `size` と `length`
– `key` と `index`
– `to_s` と `inspect`## String クラス
– `size` と `length`
– `slice` と `[]`
– `to_s` と `to_str`## Enumerable モジュール
– `collect` と `map`
– `f
RailsでGitHubActions(CI)を導入してみた
# GitHubActionsとは
GitHubによる***CI/CD(継続的インテグレーションおよび継続的デリバリー)サービス***です。
これを使うと、コードのビルド、テスト、デプロイなどを自動化できます。### 導入メリット
新しくブランチを切って作業する時、rubocop と RSpec は通った状態でマージするのがいいですよね。
どちらも手動で実行するのですが、実行漏れがあってそのまま commit, push、PR作成まですると、
漏れに気づかずマージしてしまうと、エラー時に、どの段階でエラーが出たのか、わからなくなります。CI を導入することで、これらの作業を自動で実行してくれて、問題があったら教えてくれる
こちらも参考にしてみてください。
https://qiita.com/Hashimoto-Noriaki/items/4a30f06be4fd3c5a4956
# できること
調べてみたら以下のことができるみたいです。1.***自動テスト***
誰かが新しいコードを追加すると、すぐにそのコードが動くかどうか自動的に確認するテストが実行します。2
Docked Rails CLI With PostgreSQLでRailsコマンドをDocker化する
# はじめに
僕は普段Docker環境で開発しています。
でも、Rails newでサクッと試したいときに環境作るのめんどくさいなーと思ってました.
Railsのリポジトリを見てるとDocked Rails CLIなるものを見つけてコレ使えるんじゃね?と思ったので試してみます:smile:https://github.com/rails/docked
# 前提
Docker環境がセットアップ済み# 使い方
使い方は至って簡単:relaxed:
READMEにあるように、aliasを登録したり時前のシェルスクリプトを作ったりするだです。
Railsのコマンドを開発PCのホスト環境のセットアップなしに実行できるようになります!“`bash
docker volume create ruby-bundle-cache
alias docked=’docker run –rm -it -v ${PWD}:/rails -u $(id -u):$(id -g) -v ruby-bundle-cache:/bundle -p 3000:3000 ghcr.io/rails/cl
DockerのHealthCheckでコンテナの実行順序を制御する。
## はじめに
プログラミング学習コミュニティ「progaku」で行っているチーム開発で取り組んだ内容になります。## コンテナの実行順序の制御が必要になった場面
Dockerで環境構築を行い、初めてDB作成のコマンド実行する際に以下のようなエラーが発生
“`
docker compose run backend rails db:create
“`エラー内容
“`terminal
[+] Building 0.0s (0/0) docker:desktop-linux
[+] Creating 3/0
✔ Network [ネットワーク名] Created
基礎知識④Active Recordについて
## はじめに
転職活動をする中で、MVCそれぞれの役割やhttp通信についてなど、基礎的な技術知識について問われるシーンがあったので、改めて基本に立ち返って自己学習しようと思った。出題例にActive Recordについての質問があり、
そういえばちゃんと説明できないな〜…と思ったので学習内容をまとめる。## Active Recordとは
Ruby on Railsで使用されるデザインパターンの一つで、**DBとのやり取りを簡素化してくれる**もの。
本来DBとやり取りをするためにはDB言語であるSQLが使われますが、
RailsにはこのActive Recordが適用されているため、
複雑なSQL文を書かなくてもRubyで直感的にDBとのやり取りを記述することができる。### Active Recordで出来る主なこと
– CRUD機能のサポート
Create Read Update Deleteといった基本的なデータ処理機能を
メソッドを用いて簡単に行うことができる。
– モデル同士のアソシエーション
異なるモデル間を結ぶことができます。
ex)1ユー
【個人開発】Rails×ReactのアプリでGoogleログインを実装しました(devise使わないパターン)
## はじめに
こんにちは![MaTTa](https://x.com/RckLVnPtRv61824)と申します。プログラミングスクールRunteq50期生です。先日、生成AIを用いた習慣化支援RPGアプリ「3日目に魔王がいる」をMVPリリースしました。その技術要素を細かく切り出して順に備忘録として残していこうと思います。今回は**OmniAuthを用いたGoogle認証(ログイン)機能**についてです。SNS認証ではdevise(とdevise token auth)を使ったパターンを聞くことが多いですが、自分のアプリ要件だと過剰な印象もあったので今回はそれを使わない方法で進めました。
## 参考
### アプリ紹介記事
https://qiita.com/MaTTA_RUNTEQ50B/items/c8eac9251f704164dc9c### サービスURL
https://mao-the-3rd-day-front-e8eb3156d3f2.herokuapp.com/### Githubリポジトリ
https://github.com/MaTTalv001/M
ゼロから始めるstimulus入門5(外部リソースとの連携)
## はじめに
今回はstimulusで外部リソースとの連携についてドキュメントを見ながら学んでいきます。過去回↓
第1回:[ゼロから始めるstimulus入門1(ファーストコンタクト)](https://qiita.com/shinry/items/de697c4a679e14a41ffa)
第2回:[ゼロから始めるstimulus入門2(現実的なものを作る)](https://qiita.com/shinry/items/34ca225c098aeb91b160)
第3回:[ゼロから始めるstimulus入門3(古いブラウザを考慮した設計)](https://qiita.com/shinry/items/b2b732b6aeb4374d146d)
第4回:[ゼロから始めるstimulus入門4(状態の管理)](https://qiita.com/shinry/items/b5396cc5f5165940e17d)## 外部リソースとの連携
コントローラーが外部リソースの状態を追跡しないといけない場合があります。
(「外部」とは、DOMやStimulusの一部ではないものを
enumとバルクインサートを使用した通知機能実装
# はじめに
ポートフォリオ制作中です!
今回は通知機能を実装しました!
enumとバルクインサートを活用しポリモーフィック関連付けを
使った実装をしたのでアウトプットとしてまとめます※旅行やデートのプランを共有するアプリなので、投稿機能はPostではなくPlanを使用しています!
# 完成物
![スクリーンショット 2024-06-15 13.33.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782860/acf7b7dc-e8a6-ec35-0ce4-22266ca9aec6.png)レイアウトがまだ整ってなくてすみません💦
#### 通知の条件
1.新規投稿されたときフォロワーへ通知
2.投稿にコメントされたとき投稿者へ通知
3.投稿にいいねされたときに投稿者へ通知
4.フォローされたときにユーザーへ通知
5.メッセージを送信されたときに受信者へ通知各機能は実装されていることを前提にまとめていきます
# ER図
複雑ですが、通知テーブルから各アクションのリレーションは省略
[Rails] rails db:migrateが失敗したら、スキーマファイルからデータベースを構築しよう
# 概要
マイグレーションに不整合がある場合、**`rails db:migrate`** が失敗することがあります。
過去のmigrationファイルから原因を特定し、修正しようとするとかなり時間がかかります。このような時は **`rails db:schema:load`** コマンドを使うことで、スキーマファイルから迅速にデータベースを構築することができます。
# マイグレーションコマンド
**`rails db:migrate`:**
db/migrate のマイグレーションファイルを順次実行する**`rails db:schema:load`:**
db/schema.rbのスキーマ情報をそのままデータベースに反映する ※db/migrate のマイグレーションファイルは使わない# まとめ
既存プロジェクトの環境構築などで、マイグレーションが失敗した時のために頭の片隅に置いておくと役立つ時が来るかもしれません…新規メンバー参画予定のため備忘録として執筆… :memo:
Web API 混在の Rails アプリケーションで500エラーを適切に処理したい
## はじめに
Rails で、Web API でJSONを返すものと、HTMLのページを返すものを混在させたアプリケーションを `rails new` で作成していました。
routing で、Web API は、 `/api` 以下にマウントしていました。
`/api/xxx` で Web API が呼ばれて想定外のエラーが発生した時、JSON でレスポンスを返すようにしたいと考えたのですが、意外に手間取ったので自分用にメモしておきます。
なお、動作確認は、Rails7.1 で実施しています。
## 500エラーを発生させる
意図的に 500 エラーを発生させるために、Controller で以下のようなコードを書きます。“`ruby
class Api::UsersController < ApplicationController def index raise StandardError, 'error' end end ``` ## 何もしない場合 何もしない場合、Rails は、`/500.html` を返します。JSON ではなくて、H