- 1. rails transaction が rollback しないのは マルチデータベースだからかもしれない話
- 2. activerecord.ja.ymlファイルの便利さ
- 3. Rails7でjQueryを使えるようにする
- 4. Rails7 でbootstrapを使ってModalを動かす
- 5. mysql2::error::connectionError: Access denied for user ‘root@localhost'(using password no)
- 6. Can’t connect to local Mysql server through socket ‘/tmp/mysql.sock'(2)
- 7. Rspecでモックを使用してテストを書いてみた
- 8. hotwireの学習②
- 9. hotwireの学習①
- 10. RailsアプリでVoiceVoxを使った音声読み上げ機能の実装
- 11. RailsでsasscのLoadErrorが発生した際の解決方法
- 12. RailsアプリケーションとPostgreSQLの接続問題を解決する
- 13. 【Rails】Mailerのプレビュー機能が表示される流れ(プレビュー機能が動作する経緯)
- 14. Rails x SQLite x Docker
- 15. 環境構築 Ruby Rails
- 16. Turbo Streamsを利用してモーダル画面表示と他の処理を同時に行った
- 17. strong parameter内で使うmerge以下について
- 18. Railsの全ファイルをリンター及びフォーマッターで取り締まる
- 19. Ruby on Railsで動的なフォーム要素を扱う方法
- 20. Deviseの内部挙動とActiveRecord::RecordNotFound の解消について
rails transaction が rollback しないのは マルチデータベースだからかもしれない話
# Rails で意図的に fail させているのに rollback しない!
このようなコードを書いた時には確実に rollback しますが
マルチデータベースの場合は rollback が行われないこともあります。“`rb
ActiveRecord::transaction do
User.last.update!(name: ‘new name’)
raise ‘hoge’
end
“`“`rb
class User < UserDatabase end ``` ## トランザクションのスコープ Rails では、トランザクションは特定のデータベース接続に紐付けられ UserDatabase クラスまたはそのサブクラスでトランザクションを開始した場合 そのトランザクションは UserDatabase の 接続先DBでのみ有効になります ## 対象DBにつながっているクラスでトランザクションを開始する ActiveRecord::transaction で開始するのではなく `User.transaction` や `UserDatabase
activerecord.ja.ymlファイルの便利さ
## はじめに
Railsで簡単な掲示板サイトを作っていた時に、ページ(今回はプロフィール画面)のカラムが期待通りに表示されておらず、なかなか原因が分からなかった事がありました。
## 環境
ruby 3.14
rails 7.0.3.1
## 目次
事例
activerecord.ja.ymlファイル
別の方法
まとめ## 事例
Railsで簡単な掲示板サイトを作っていた時に、profileページが期待通りに表示されませんでした。![qiita1-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726578/8a8764e4-651a-7673-9c44-ea758a58d44d.png)
メールアドレスや氏名がちゃんと表示されているにも関わらず、アバターだけがAvatarと英語表記になってしまっています。
profiles/edit.html.erb
“`<%= form.label :last_name %>
<%= form.Rails7でjQueryを使えるようにする
## 導入手順
importmapにjqueryを追加する
“` text:console
bin/importmap pin jquery
“`動作確認も含めて以下を追加
“` js:javascript/application.js
import jquery from “jquery”
window.$ = jquery$(function(){
alert(‘ok’);
});
“`ちゃんと動いていたらページを更新すると
アラートが表示されます。簡単だけどimportmapが全然わからないときめっちゃ困ったから書きました。
Rails7 でbootstrapを使ってModalを動かす
## 環境
* Rails 7.1.3
* ruby 3.2.1
* bootstrap 5.3.2## 目的
**railsでbootstrapを動かす**Rails tutorialを終えて、その他にもハンズオン形式のサイトに取り組んでいたらbootstrapを使ったモーダルなどが動作しない・・・
ということでとりあえず動くようになるまで調べた結果を書いていきます。※間違えていたらマジで色々教えてください
>参考サイト
## 新しいプロジェクトを作る
まずはコマンド
“`
rails new modal
“`
Gemfileに必要なgemを書く“`ruby:Gemfile
gem ‘bootstrap’
gem ‘sassc-rails’
“`:::note warn
sassc-railsは古いらしい
darts-scssというのがrails7では推奨みたいなので、調べて理解したら記事作mysql2::error::connectionError: Access denied for user ‘root@localhost'(using password no)
# エラー
“`
ActiveRecord::DatabaseConnectionError
There are an issue connecting to database with your username/password,username: root
Please check your database configuration to ensure the username/password are valid.
“`ユーザー名/パスワードでのデータベース接続に問題があります、
ユーザー名: root
ユーザー名/パスワードが有効かどうか、データベース設定を確認してください。### 出典
deepL### 気づき
username,passwordが関係してdatabaseに接続できていないらしい。
username,passwordに関係していることと言えばログインかな。
とりあえずログインしてみよう。ログインしたがエラーが治らない。
# スクロール先にエラーがあった。
“`
mysql2::error::connectionError: AccCan’t connect to local Mysql server through socket ‘/tmp/mysql.sock'(2)
# エラー
ActiveRecord::ConnectionNotEstablished
Can’t connect to local Mysql server through socket ‘/tmp/mysql.sock'(2)これは、MySQL サーバーデーモン (Unix) またはサービス (Windows) が起動していないことを示しています。
### 出典
https://dev.mysql.com/doc/refman/8.0/ja/connecting-disconnecting.html#:~:text=ERROR%202002%20(HY000)%3A%20Can%27t%20connect%20to%20local%20MySQL%20server%20through%20socket%20%27/tmp/mysql.sock%27%20(2)%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E3%80%81MySQL%20%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%83%87%E3%83%BC%E3Rspecでモックを使用してテストを書いてみた
## mocksを使用した経緯
テストしたいクラスが、S3バケットへの署名付きURLの発行やCSVの生成などのために複数のクラスとの依存関係にあり、単独でテストをする必要があったため使用しました。## 参考にした記事
https://qiita.com/k-o-u/items/e6f671a1fc0bf720932dhttps://zenn.dev/sa2knight/articles/2388ecadc82b98
## mocksの基本について
ほぼほぼ上記の記事と同じ内容ではありますが、
“`hoge_spec.rb
let(:class_a) { instance_double(ClassA) }
“`
これでClassAのテストダブル(影武者)のclass_aが作成できます。
しかし、このままではこのclass_aはメソッドなどは何も持っていないので情報を付与する必要があります。“`hoge_spec.rb
allow(ClassA).to receive(:new).and_return(class_a)
allow(class_a).tohotwireの学習②
# はじめに
この記事は、hotwireの学習についての備忘録です。https://qiita.com/youfuku/items/e608683821f03d9a4cfe
前回の記事の続きです。
今回は、主に「Turbo Streams」に絞った内容です。## 前回からの修正
情報が少ないので、showを使う場面あるっけ?と思いまして、リンクを削除します
“`diff:app/app/views/todos/_todo.html.erb<%= todo.id %> <%= todo.content %> – <%= link_to "Show", todo, class: "btn btn-sm btn-outline-primary me-2" %>
<%= link_to "edit", edit_todo_path(todo), class: "btnhotwireの学習①
# はじめに
この記事は、hotwireの学習についての備忘録です。https://qiita.com/youfuku/items/782b0a7f974e2a53d89e
前回の記事の続き(importmap + bootstrap)です。
また、記事が長くなると思われるので、数回に分割する予定です
今回は、主に「Turbo Frames」に絞った内容です。# hotwireとは
他の記事に詳細が書かれてるので、この場ではさらっとした説明です。
HotwireはRails7からRailsのフロントエンドのデフォルトとなった技術です。
また、複数の機能を統合した相称の名前となります。– Hotwire
– Turbo
– Turbo Drive ・・・画面描写を早くする
– Turbo Frames ・・・部分差し替えを行う(主にgetで利用)
– Turbo Streams ・・・部分差し替えを行う(主にget以外で利用)
– Stimulus ・・・rails専用のJShttps
RailsアプリでVoiceVoxを使った音声読み上げ機能の実装
## 前提条件
– Ruby on Rails 6.x以上
– Dockerインストール済み
– VoiceVoxエンジンがDockerコンテナとして動作中## VoiceVoxのセットアップ
DockerコマンドでVoiceVoxエンジンのセットアップを行います。
“`bash
docker pull hiroshiba/voicevox_engine:latest
docker run -d -p 127.0.0.1:50021:50021 hiroshiba/voicevox_engine:latest
“`## Railsアプリケーションの設定
Railsプロジェクト側の設定は主に3つの部分に分かれます。サービスクラス設定、コントローラーからのサービスクラスの呼び出し設定、ビューからコントローラアクションの呼び出し設定です。
### クラスの設定
`app/services/voicevox_service.rb`に以下のようにサービスクラスを作成します。
“`ruby
class VoicevoxService
include HTTPartyRailsでsasscのLoadErrorが発生した際の解決方法
## はじめに
Railsアプリケーションで、scssファイルにCSSを記述しようとしたところ、以下のエラーメッセージが発生しました:
“`
LoadError in HomeController#home
cannot load such file — sassc
“`この記事では、このエラーが発生した際の解決方法について説明します。
## 問題の原因
scssファイルにCSSを記述する際、それまで全くCSSを記述していなかったため、scssコンパイル時にsasscが必要とされたが、インストールされていなかったためにエラーが発生しました。
## 解決方法
以下の手順で問題を解決しました:
1. Gemfileにsassc-railsを追加する。
2. `bundle install` を実行してGemをインストールする。
3. Railsサーバーを再起動する。これで問題が解消され、scssファイルにCSSを記述することができるようになりました。
## まとめ
scssファイルにCSSを記述する際には、sassc gemが必要となります。エラーが発生
RailsアプリケーションとPostgreSQLの接続問題を解決する
Railsアプリケーションを開発している際、PostgreSQLデータベースへの接続でつまずくことがあります。この記事では、そのような時に役立つ解決策を共有します。
## 前提
RailsアプリケーションからPostgreSQLデータベースへの接続時に次のようなエラーが発生しました。
“`plaintext
ActiveRecord::ConnectionNotEstablished (could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket “/tmp/.s.PGSQL.5432”?):
“`このエラーは、RailsがPostgreSQLサーバーへの接続を試みるも、指定されたUnixドメインソケットが見つからないために発生します。
## 解決策
### 1. PostgreSQLサーバーの状態確認
まず、PostgreSQLサー
【Rails】Mailerのプレビュー機能が表示される流れ(プレビュー機能が動作する経緯)
## Mailerのプレビュー機能が表示される流れ
Mailerを用いて、プレビュー機能(送信メールの確認画面を表示する機能)の処理の流れを理解に苦戦したため、自分用に備忘録として残しておきます。
※ざっくりとした流れだけですので、詳細については割愛してます。私と同じ境遇の方の役に立てば幸いです。
## 環境
` gem ‘letter_opener_web’`導入済み。### 1.プレビュークラスの定義
今回は、下記のプレビューファイルを定義しています。
“`Ruby:spec/mailers/previews/article_mailer_preview.rb
# Preview all emails at http://localhost:3000/rails/mailers/article_mailer
class ArticleMailerPreview < ActionMailer::Preview def report_summary ArticleMailer.report_summary end end ``` `ArticleMailRails x SQLite x Docker
## 前提
Ruby on Rails SqLite(Railsのデフォルト)の環境を作成
Ruby on Rails Tutorial等の学習目的にサクッと作成できる環境を目指したのが作成動機
ホスト側にRuby関連の環境が存在しない場合の構築手順## 準備すべきファイル
“`
docker-compose.yml
Dockerfile
entrypoint.sh
“`docker-compose.yml
“`yml
version: “3.8”
services:
app:
build:
context: .
dockerfile: ./Dockerfile
tty: true
volumes:
– ./:/myapp
ports:
– “3000:3000”
environment:
– TZ=Asia/Tokyo
“`“`sh
#!/bin/bash
set -erm -f /myapp/tmp/pids/server.pid
# RUN MAI
環境構築 Ruby Rails
## はじめに
Railsを1年以上ぶりに触る過程でいろいろ気づきを得た
以前は勘違いしていた箇所や不要な処理もあったため書き直し## 前提
HomebrewとxcodeのCommand Line Toolsはinstallされている前提とします。
まだの方は下記記事を参考にinstallしてくださいhttps://brew.sh/ja/
https://qiita.com/SayCheeese/items/1b9db660917049bbad64
## rbenvのインストール
“`shell
# rbenvのinstall (ruby-buildも自動でインストールされる)
# ruby-build:「rbenvのプラグインとしてrbenv installコマンドを使用できるようにする」
1 brew install rbenv# rbenvが正常にインストールできたか確認
2 rbenv -v# rbenvでinstallされたRubyを実行するためのPATHを通す
3 echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘Turbo Streamsを利用してモーダル画面表示と他の処理を同時に行った
## 今回実装した処理の流れ
フォーム送ると、①非同期のジョブ、②モーダルの表示、③ジョブ結果を描画するテーブルの表示、の3つの動作を同時に行う機能を実装しました。
この記事ではそのturboのでのモーダル表示部分のみを記録しています。## 実装したもの
モーダル部分
“`index.html.erb“`
これだけ。ここをturbo_streamによってパーシャルに書き出したものと置き換えることでモーダル画面を描画させる。
同じページのボタン部分
data: { turbo_stream: true }をつけるとコントローラーでturbo_streamのリクエストとして受け取ることが出来ます。
“`index.html.erb
<%= form_with url: hoge_path(@hoge), scope: :huga, data: { turbo: true } do |f| %>“`
切り出したパーシャル。bootstrapのモーダルを使っています。
モーダル表示strong parameter内で使うmerge以下について
def purchase_record_params
params.require(:purchase_record).permit(:zip_code, :region_of_shipping_origin_id, :city, :street_address, :apartment_name, :tel)
endというコード内においてどうやらmergeが必要だったことがわかった。
今回はmergeの使い方を考えてみます。
結論mergeとはハッシュとハッシュの結合ということが分かった。
例
tweet = { name: “たなか”, text: “test”, image: “test.jpeg” }
uid = { user_id: “1” }
tweet.merge(uid)
=> {:name=>”たなか”, :text=>”test”, :image=>”test.jpeg”, :user_id=>”1″}Railsの全ファイルをリンター及びフォーマッターで取り締まる
## 概要
RailsでRubocopを使って、Rubyファイルの秩序を保っている人は多いだろう。しかし一方で、その他のファイルの治安はおざなりになっている人も多いはず。
この記事ではRailsによく登場するファイル全てに対して、リンター及びフォーマッターを適用することを目標とする。
## Ruby
[Rubocop](https://github.com/rubocop/rubocop)を使用する。
“`bash
bundle add rubocop rubocop-performance rubocop-rails rubocop-rspec
“`最低限の`.rubocop.yml`はこんな感じだろうか。
“`yaml
require:
– rubocop-performance
– rubocop-rails
– rubocop-rspec
– rubocop-factory_botAllCops:
TargetRubyVersion: 3.2
NewCops: enable
“`## JS, CSS, HTML
[ES
Ruby on Railsで動的なフォーム要素を扱う方法
この記事では、Ruby on Railsで動的にフォームの表示を切り替える一例として、サービス選択に応じて特定のフォームフィールドを表示・非表示する方法を紹介します。主に`id`属性の動的な生成とJavaScriptを使用したDOMの操作に焦点を当てて解説します。
## まず結論
問題の解決策は、`id`属性をERBテンプレート内で動的に生成し、JavaScriptを用いてその`id`を持つ要素の表示を切り替えることでした。具体的には、以下のように記述しました。
※<%= service.id %>の部分が重要でした。
※コメントアウト部分はコンソールでログを出しつつ試行錯誤した履歴です。“`app/views/staffs/registrations/edit.html.erb
Deviseの内部挙動とActiveRecord::RecordNotFound の解消について
## はじめに
RailsアプリケーションにおいてDeviseを用いたユーザー認証機能のカスタマイズ中に`ActiveRecord::RecordNotFound – Couldn’t find Staff without an ID:`というエラーメッセージが発生しました。この記事では、このエラーがなぜ発生したのか、そしてどのようにして解決に至ったのかを共有します。
## エラーの内容
ユーザー情報の更新フォームを送信した際に、以下のエラーメッセージが表示されました。
“`
ActiveRecord::RecordNotFound – Couldn’t find Staff without an ID:
app/controllers/staffs/registrations_controller.rb:46:in `set_staff’
Started GET “/staffs/edit?id=2” for ::1 at 2024-02-28 00:00:38 +0900
Processing by Staffs::RegistrationsController#ed関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた