- 1. ghaにおけるrspecで発生するActiveRecord::ConnectionNotEstablished: MySQL client is not connected への対処
- 2. 【Rails】rails generate controllerで生成されるファイルを制限する【Railsアプリ全体のジェネレータ設定変更】
- 3. docker composeでRailsアプリをDocker化する
- 4. form_with使用時に結びつきのないmodelがi18nで翻訳されなかった時の話
- 5. ユーザー管理機能
- 6. kaminari で データ件数が膨大(1000万件)の際の高速化案。検索してください。
- 7. Rails パラメータを直接使って四則演算する際の注意点と解決策
- 8. 【Rails】form_withにおけるmodel: とは何者か?
- 9. 【Rails】yieldとrenderの違い
- 10. Rails7でtailwindcss-stimulus-componentsを使用したタブ化
- 11. [Docker]docker-composeでrailsアプリをコンテナ化する
- 12. 【Rails】O/Rマッピング時の中間テーブル、わかりにくかったので簡単に調べた。
- 13. 【Rails】StimulusでBootstrapのTooltipを動かす
- 14. An executable bug report for Action Cable
- 15. ranked-modelで既存のレコードに値を入れる際の注意点
- 16. acts_as_listとranked-modelの違い
- 17. Rspecの導入と単体テストコード
- 18. 投稿アプリ詳細表示機能 同じコードをまとめる
- 19. RailsのCORSで配列の環境変数を使うときの注意
- 20. 【Athena】重くなってきた読み込みを何とかしたい② パーティション射影を利用してみる
ghaにおけるrspecで発生するActiveRecord::ConnectionNotEstablished: MySQL client is not connected への対処
## エラー内容
“`rb
ActiveRecord::ConnectionNotEstablished:
MySQL client is not connected
“`## 改善前の実装
“`yml:.github/workflows/backend_test.yml
name: Backend Testjobs:
run-rspec:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8.0
ports:
– 3306:3306
env:
MYSQL_ALLOW_EMPTY_PASSWORD: “yes”
“`## 改善策
ヘルスチェック周りのオプションを設定する
これにより、rspec実行前にmysqlコンテナの起動が完了していることを確認できるようになる(はず)。## 改善後の実装
“`yml:.github/workflows/backend_test
【Rails】rails generate controllerで生成されるファイルを制限する【Railsアプリ全体のジェネレータ設定変更】
※この記録は、プログラミング初学者である私が、行き詰まったり難しいと思ったりしたものを復習できる様にとして残している自分メモです。同じ様なところでつまずいている方のお役に立つことができれば尚よし。間違った記載等あれば教えていただければありがたいです。
## はじめに
いろんなファイルを自動作成してくれるgenerateコマンド。しかし初期段階では何から何まで自動生成されると煩わしさを感じるものもあるからRailsにはジェネレーター実行時にファイルを生成しない為の設定も用意されている。
今回は、config/application.rb内の設定によって、generate コマンドで生成されるファイルに制限をかけようかと。## rails generation時の挙動を確認
ターミナルでrails generation(またはrails g)を実行。
下記の様な色々なファイルが自動生成される。“`
$ bin/rails g controller boards
Running via Spring preloader in process 26592
[+] Running 2
docker composeでRailsアプリをDocker化する
## はじめに
今回はdocker composeで既存のRailsアプリをDocker化する方法を学んだので、
アウトプットしていこうと思います。## 前提
* Docker未使用で動作する既存Railsアプリを使用する
* 以下の環境で構築する
“`
ruby: 3.2.2
Rails: 7.0.6
postgre: 12
docker-compose: 3.9
“`## 手順
0\. Dockerのインストール & 起動
1\. 任意の階層に作業ディレクトリを作成 & 移動
2\. Docker化してない既存Railsアプリをクローンしてくる
3\. 各種必要ファイルの作成
4\. database.ymlの編集
5\. コンテナ起動
6\. ブラウザで動作確認### 0. Dockerのインストール & 起動
Docker(for Mac)のインストールおよび起動のやり方に関しては、
下記URLを参考にしてみてください!https://matsuand.github.io/docs.docker.jp.onthefly/desktop/ma
form_with使用時に結びつきのないmodelがi18nで翻訳されなかった時の話
## はじめに
こんにちは、Webエンジニア目指して学習中のさばと申します🐟(X:@saba7678pg)
昨夜戦っていたエラーとの痕跡を折角なので記録しておこうと思います。:::note warn
もっとこうした方が良い、この方法だと不都合が起きる等
何かございましたら、お手数ですがコメント・DM等でお知らせ頂けますと幸いです。
:::## 環境
– Docker環境下
– ruby 3.2.2
– rails 7.1.2
– rails-i18n 7.0.8## フラッシュメッセージが”一部”正しく翻訳されない
以下画像のように、フラッシュメッセージが一部だけ翻訳されない不具合が出ておりました。
[![Image from Gyazo](https://i.gyazo.com/96b60cfc87d63a36ac0510d45cf64b26.png)](https://gyazo.com/96b60cfc87d63a36ac0510d45cf64b26)
“` ruby
# views/posts/_form.html.erb<%= form
ユーザー管理機能
ユーザ管理機能はとても便利なRuby on RailsのGem機能です!
備忘録として投稿します!### 目的
– deviseを理解
– deviseを使用したユーザー登録の理解
### ログイン機能の実装
– ユーザー登録したユーザーのみがアプリを使えるようにする
– ログインしてないユーザーは投稿機能のアプリだと
新規作成、編集、削除機能などが使えないようにする### ライブラリのインストール
#### devise
ユーザー管理機能を簡単に実装するためのGem
Gemfile
`gem ‘devise’`ターミナル
`bundle install`
Gemインストール後はサーバー再起動
インストールしたGemの反映のタイミングが、サーバー起動時であるため
`ターミナル`### deviseの設定ファイルを作成
#### rails g devise::innstall コマンド
追加したdeviseというGemの「設定関連に使用するファイル」を自動で生成するコマンド`rails g devise:install`
### deviseのUse
kaminari で データ件数が膨大(1000万件)の際の高速化案。検索してください。
# kaminari は データ数の count 処理を実行している
最大ページ数を調べ、表示 or リンクを作るために
全データが何件あるのか count してしまいます。1000万件など膨大なデータがある場合には count 処理が重くなり time out も発生します。
## ページネーションで10ページも移動して目視で探す人は…
手動で10ページも移動して目視で探すのは非効率なので
10ページ目まではページネーションを作るが
それ以降は検索してくださいというスタンスで高速化できます。## 実際のコード
“`erb.slim
= paginate @pv_logs, total_pages: 10
p ※ PV情報はデータが膨大なため、最大10ページまで移動できます、それ以上のページに移動する場合は検索条件を絞り込んでください。
“`
Rails パラメータを直接使って四則演算する際の注意点と解決策
※この記事は僕がぶち当たった問題をとりあえずChatGPTくんに丸投げしてライティングしてもらったものです。
# はじめに
Railsアプリケーションを開発する際に、パラメータの処理は非常に重要です。
しかし、パラメータはデフォルトで文字列として扱われるため、予期せぬ結果が生じることがあります。
本記事では、その中でも掛け算の処理に焦点を当て、問題の理解と解決策について説明します。# パラメータの文字列扱いによる問題
Railsでは、リクエストパラメータはデフォルトで文字列として扱われます。例えば、以下のようなコントローラアクションがあるとします。“`ruby
# app/controllers/products_controller.rbclass ProductsController < ApplicationController def calculate_price price = params[:price] result = price * 5 render json: { result: result } end end `
【Rails】form_withにおけるmodel: とは何者か?
:::note warn
**注記**
この記事の投稿者はRuby on Rails初学者であり、自身の学習の備忘録目的で記事投稿を行なっております。
情報の正確さには最大限注意をしておりますが、もし誤り等がございましたらお知らせいただけますと幸いです。
:::こんにちは!
ご覧いただきありがとうございます!
**Ito** と申します!
Ruby on Rails初学者です。
タイトルの通り
**form_withにおけるmodel: とは何者か?**
個人的にわかりにくいと感じたので、端的にまとめてみました。## 場面設定
掲示板アプリを想定しています。* `Post`モデルの`index`ビューに、`author`(著者)を選択して`post`を検索できる検索フォームを実装しています。
* `Post`モデルが`Author`モデルと関連付けされています。
* `authors`テーブルと`posts`テーブルは **一対多** の関係です。### モデル
“`rb:app/models/post.rb
class Post < Applicat
【Rails】yieldとrenderの違い
# はじめに
Railsチュートリアルを進めているとview/layouts/application.html.erbの中で見かけたyieldというメソッドと部分的に描画するrenderという似たようなメソッドが目につき、これどういう違いなのかと疑問に思ったので記事にしてました。# そもそもapplication.html.erbって?
Railsのビューは
– application.html.erb → HTMLやHEADタグなどの共通レイアウト
– アクション名.html.erb → BODYタグ内の個別レイアウトこの二つで役割分担して画面表示している。
application.erbはコントローラ固有のレイアウトが見つからない場合、**デフォルトで使用される共通レイアウト。**
全てのページで使われるhead、ヘッダー、フッターなどをここで一括して書くことで個別レイアウト内で同じコードを書く必要がなくなり、DRYが保たれる。
[(コントローラーでレイアウトを指定するにはlayoutメソッドを使う)](https://pikawaka.com/rails/layou
Rails7でtailwindcss-stimulus-componentsを使用したタブ化
# はじめに
個人開発のアプリ制作をしています。
調べながらの実装になるので、メモとして記載しています。※注意※
プログラミング学習中の初心者です。
記述に間違いがあれば、ご指摘いただけますと幸いです。# 環境
Mac M1
rails 7.0.7.2
ruby 3.2.0
Node.js 20.2.0
Yarn 1.22.19# やったこと
## ①tailwindcss-stimulus-componentsのインストール
“`
$ yarn add tailwindcss-stimulus-components
“`
npmを使用している場合は、下記でもインストール可能です。
“`
$ npm install tailwindcss-stimulus-components
“`
## ②importmapに記述を追加
下記コードを打つと、importmapにtailwindcss-stimulus-componentsが追加されます。
“`
$ bin/importmap pin tailwindcss-stimulus-components
“`
[Docker]docker-composeでrailsアプリをコンテナ化する
## はじめに
既存のrailsアプリをdocker,docker-composeを使用してコンテナ化する方法について解説します。
## 前提条件
– ローカル環境
“`
pc: m1 mac
os: Venture 13.3.1
“`
– 各種version
“`
Docker: 24.0.7
Docker Compose: v2.23.3
Ruby: 3.22
Rails: 7.0.6
PostgreSQL: 12.17
“`
– 必要知識
– 基本的なDockerの知識
– railsのコマンド## 手順
### プロジェクトをローカルにコピーする
※既にローカルにプロジェクトがある場合は[Dockerfileを用意する](Dockerfileを用意する)までスキップして下さい。
まずはコンテナ化したいプロジェクトをGitHubからローカルにクローン(コピー)しましょう。
“`bash
$ git clone <リポジトリパス>
“`
以降の作業はコピーしたディレクトリで行うため`cd`コマンドで移動します。
“`zsh
$ cd <ローカル
【Rails】O/Rマッピング時の中間テーブル、わかりにくかったので簡単に調べた。
:::note warn
**注記**
この記事の投稿者はRuby on Rails初学者であり、自身の学習の備忘録目的で記事投稿を行なっております。
情報の正確さには最大限注意をしておりますが、もし誤り等がございましたらお知らせいただけますと幸いです。
:::ご覧いただきありがとうございます!
**Ito** と申します!
Ruby on Rails初学者です。
タイトルの通り
**「RailsでのO/Rマッピング時、中間テーブルがどのように変換されているのか?」**
個人的にわかりにくいと感じたので、端的にまとめてみました。## 場面設定
タグ投稿機能を持った掲示板アプリを想定しています。`Post`モデルが`Tags`モデルと関連付けされています。
`posts`テーブルと`tags`テーブルは`post_tags`テーブルを介して多対多の関係です。### モデル
“`rb:app/models/post.rb
class Post < ApplicationRecord has_many :post_tags has_many
【Rails】StimulusでBootstrapのTooltipを動かす
今回は、Stimulusを使用してBootstrapのTooltipを動かす方法について紹介します。
https://getbootstrap.jp/docs/5.3/components/tooltips
## ツールチップとは?
ツールチップは、ユーザーが要素(ボタンや画像など)にホバーしたりクリックしたりした際に表示される、小さな説明文の吹き出しです。これは、要素単体では意味が不明確な場合に特に有用です。![tooltip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/849608/092d039b-7633-9a1c-7902-437a676722c1.png)
## インストール方法
まず、`bootstrap`と`popperjs`が`node_modules`に含まれているかを確認してください。もし存在しなければ、`yarn add bootstrap`または`npm install bootstrap`を実行してインストールしましょう。## Controllerの作成
To
An executable bug report for Action Cable
So this is kind of last minute, but I thought it would be interesting to try and create a [bug report template](https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#create-an-executable-test-case) for Action Cable.
After having wasted maybe an hour or so trying to parse the browser logs, only to realize that Chrome prepends the file/url and line number before simply `[object Object]` style — I ended up just writing to a `
ranked-modelで既存のレコードに値を入れる際の注意点
# はじめに
こんにちは、HappyManaです。
ranked-modelを使った際、既存レコードに値を入れる処理を書いたのですが、
ranked-modelのREADMEに書いてある方法で困ったことがあったため備忘録として書きます。# 困ったこと
ranked-modelの[README](https://github.com/brendon/ranked-model#migrations-for-existing-data)には、以下の方法が書いてあります。
“`
Duck.update_all(‘row_order = EXTRACT(EPOCH FROM created_at)’)
“`これは、timestamp型のcreated_atをUNIX時間に変換するというものです。
UNIX時間は、1970年1月1日午前0時ちょうどからの経過秒数なので整数値になります。
なので並び替えのカラムの型をINTEGER型とすると、型としては問題はありせん。しかし、created_atをUNIX時間に変換する際に、ミリ秒が四捨五入されるという処理になりました。
たとえば、c
acts_as_listとranked-modelの違い
# はじめに
こんにちは、HappyManaです。
Railsで並び替えをしたいときに使うgemで、大きく[acts_at_list](https://github.com/brendon/acts_as_list)と[ranked-model](https://github.com/brendon/ranked-model)があります。
この2つのgemの違いがわかりにくかったため、紹介するとともに違いを書いていきます。並び替え用のdbカラムは、row_orderカラムとします。
# dbに入る値が異なる
最も異なるのがこれです。
他にもいろいろ違いはありますが、1番大きな違いなので、これを説明していきます。## acts_as_list
acts_as_listでは、カラムに1、2など「そのレコードが何番目か」が入っています。
例えば、現在3番目のレコードを2番目に並べ替えたいとき、acts_as_listでは、2番目と3番目のレコードのrow_orderカラムが変更されます。| id | row_order |
| – | – |
| 1 | 1 |
| 2 | 2
Rspecの導入と単体テストコード
テストは非常に重要だけど、避けていました、、、笑
しっかり復習していきます!### 目的
– RSpecでテストのテストの書く準備
– 基本てみなテストコードの書き方理解
– テストコードの実行方法を理解### バリデーション設定
app/models/user.rb
“`ruby
validates :nickname, presence: true
“`### RspecのGem追加
Gemfile
“`ruby
〜 略〜
group :development, :test do
gem ‘rspec-rails’, ‘~> 4.0.0’
end
“`
ターミナル
`bundle install`### RSpec設定
`rails g rspec:install`テストコードの結果をターミナル上に可視化する
.rspec
`–format documentation`### テストファイル作成
`rails g rspec:model userspec/models/user_spec.rb
“`ruby
require ‘rail
投稿アプリ詳細表示機能 同じコードをまとめる
今回もテックキャンプのカリキュラムの復習です!
### 目的
– showアクションの処理の理解
– before_actionを理解### showアクションのルーティングを設定
詳細画面のパスは、削除や編集と同じくツイートごとに管理
idが1のツイート詳細画面は、`/tweets/1`パスconfig/routes.rb
“`ruby
resources :tweets, only: [:show]
“`### もし、7つのアクションがある場合
“`ruby
変更前
resources :tweets, only: [:index, :new, :create, :destroy, :edit, :update, :show]
変更後
resources :tweets
“`rails routesを実行
ターミナル
“`weet GET /tweets/:id(.:format) tweets#show“`### 詳細ボタンを投稿一覧に追加
app/views/tweets/index.html.erb
“`ruby
<%= link_to
RailsのCORSで配列の環境変数を使うときの注意
# はじめに
こんにちは、HappyManaです。
RailsのCORS設定で、オリジンを複数指定したいことがあり、環境変数に配列を使いました。
その際の注意点を備忘録として残します。# 環境変数に配列を使う
環境変数で配列を使う際は、以下のように書きます。
“`env
CLIENT_ORIGIN=[“http://localhost:8000″,”https://example.jp”]
“`CORSのoriginsには以下のように書きます。
“`
origins JSON.parse(ENV[‘CLIENT_ORIGIN’] { ‘[]’ })
“`# 注意点
## シングルクォーテーションで囲わない
例として、以下のようにシングルクォーテーショを使った配列にします。
“`env
CLIENT_ORIGIN=[‘http://localhost:8000′,’https://example.jp’]
“`そうすると、以下のエラーが出ます。
“`
/usr/local/lib/ruby/3.1.0/json/common.rb:216:in `parse
【Athena】重くなってきた読み込みを何とかしたい② パーティション射影を利用してみる
# はじめに
[【Athena】重くなってきたパーティション読み込みを何とかしたい① シンプルに読み込み対象のログを減らしてみた](https://qiita.com/TKY_study/items/969f2a21f73ce598979e)の続きとなります。# 今回試してみた事:パーティション射影の導入
元のDDLをベースにTBLPROPERTIESを以下のように書き換えて設定を行いました。
パーティションの範囲の関しては`..`が使用でき、例えば`’01,02,03,04’`は`01..04`と書けます。
また「〇〇以降」といった設定法が無さそうでしたので、yearに関しては仮で`2021..2100`としました
設定の結果、数日おきのパーティションロード等であれば数十秒程度で完了出来るようになりました。“`SQL
CREATE EXTERNAL TABLE `app_prod_rails`(
`date` string COMMENT ‘from deserializer’,
`container_name` string COMMENT ‘from des