Rails関連のことを調べてみた2022年12月24日

Rails関連のことを調べてみた2022年12月24日
目次

Rails上でBootstrapの使い方

# はじめに
Railsアプリ開発の際、フロントエンドのコーディング時にBootStrapというフレームワークを利用し、CSSやJavaScriptのコーディングが簡略化する事ができます。そのBootstrapの導入方法についてまとめます。

# 方法1
※tarminalのディレクトリの位置はアプリ内に位置する様にcdコマンドで予め移動させてください。

1\. Bootstrapを導入
“`.terminal
% yarn add bootstrap@next
“`
:::note info
コマンド実行後、バージョンを設定する画面が表示されます。ベータ版は不具合が生じる可能性がある為、注意が必要です。
:::

2\. popper.jsを導入
“`.terminal
% yarn add @popperjs/core
“`

3\. app/javascript/packs/application.js を読み込む

“`app/views/layouts/application.html.erb
<%= stylesheet_pack_tag 'applicatio

元記事を表示

Ruby on Rails の ActiveRecord における attr_accessor と attribute メソッドの違い

Ruby on RailsでActiveRecordのモデルに属性を追加する時に`attr_accessor`と`attribute`という2つのメソッドが使えますが、この2つの違いって何?ということを簡単にまとめました。

# 結論
Ruby on Railsの`ActiveRecord::Attributes`モジュールのメソッドである[`attribute`](https://api.rubyonrails.org/classes/ActiveRecord/Attributes/ClassMethods.html#method-i-attribute)を使用してモデルに追加した属性は、
– その値が変更された時にダーティフラグが立つ、
– 定義時にキャスト型を指定する事により、モデルがインスタンス化される時に型をオーバーライドできる(第2引数)、
– デフォルト値を指定できる(第3引数)、

等の特徴を持ちます。一方で、Rubyの組み込みライブラリである`Module`クラスのメソッド[`attr_accessor`](https://docs.ruby-lang.org/ja/

元記事を表示

RailsチュートリアルでSass::SyntaxError: File to import not found or unreadable: bootstrap-sprockets.が出たので解決策を探ってみた。

問題

・RailsチュートリアルにあるBootstrapが導入できない。

結論

・custom.scssから@import “bootstrap-sprockets”;を削除する。

“`Scss:custom.scss
@import “bootstrap-sprockets”; ←この行を削除する
@import “bootstrap”;
“`
[bootstrap3から4への移行方法について (Rails5)
](http://binbo-roku.com/bootstrap/programming/study/bootstrap)によると、@import “bootstrap-sprockets”;という記述はbootstrap4からは必要がなくなっているようだ。

おそらく、rails-tutorialで想定しているのはbootstrap3でコードもそれを想定したものになっていたのかと。なんらかの理由でbootstrap4以上のバージョンが使用されていたため、(原因はよくわかっていません。)この記述

元記事を表示

Stimulus リファレンス: CSSクラス

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/reference/css-classes

HTMLではCSSクラスは`class`属性を使用して要素に適用できる一連のスタイルを定義します。

CSSクラスはスタイルを変更したりプログラムでアニメーションを再生したりするための便利なツールです。 たとえばStimulusコントローラーはバックグラウンドで操作を実行しているときに”loading”クラスを要素に追加し、CSSでそのクラスをスタイルして進行状況インジケーターを表示する場合があります。

“`html

“`

“`css
.search–busy {
background-image: url(throbber.svg) no-repeat;
}
“`

クラスをJavaScript文字列でハードコ

元記事を表示

Handle race condition in rails with pessimistic locking

# What is race condition

> A race condition or race hazard is the condition of an electronics, software, or other system where the system’s substantive behavior is dependent on the sequence or timing of other uncontrollable events. It becomes a bug when one or more of the possible behaviors is undesirable

In software development, `race condition` can happen when multiple threads read and update a record or create records at the same time. `Race condition` rarely happens but when it occurs, it

元記事を表示

RailsのTimezoneのparseメソッドを使用する前に正規表現でチェックすべき

この記事は、[リンクバルアドベントカレンダー2022](https://qiita.com/advent-calendar/2022/linkbal)の24日目の記事です。

# はじめに
改めまして技術部のダットです!:tangerine:
[machicon JAPAN](https://machicon.jp/)という自社のメインサービスの開発をしています。
開発するとき、よく`RailsのActiveSupport::Timezoneのparse`メソッドを使っています。データベースに保存している日付の価値はUTC(_協定世界時_)ですから、ユーザーに日付を表示させるとき、そのユーザーのタイムゾーンの日付に変換する必要があります。ですが、`Timezoneのparse`を使用するとき、何を注意すべきか、この記事を通じて説明します。:hand::hand:

# Timezoneのparse、正規表現は何か?
`Timezoneのparse`を使用すると、指定したタイムゾーンに日付を変換できます。
“`config/application.rb
# Railsアプリケーションの

元記事を表示

gem pg が入らない時の手順

エラーメッセージ
extconf.rb:40:in `popen’: Permission denied – /usr/local/Cellar/libpq/15.1 (Errno::EACCES)
from extconf.rb:40:in `

1.rbenvを再インストール
`% rbenv uninstall 3.0.2`
`% RUBY_CFLAGS=”-Wno-error=implicit-function-declaration” arch -x86_64 rbenv
install 3.0.2`

2.gemを削除,Gemfile.lockを削除
`% sudo rm -rf vendor/bundle`
`Gemfile.lockを削除`

3.bundleインストール
`% bundle config build.pg –with-pg-config=/usr/local/Cellar/postgresql@14/14.6/bin/pg_config`
=>config=の後はpg_configのフルパスを書く

`% bu

元記事を表示

Quickstart: Compose and Rails を WSL2で試して躓いた時のメモ

### モチベーション
業務でRailsを使うことが決まったので、そのためのキャッチアップをなと。
環境構築の際に、1からやるの面倒なので[Quickstart: Compose and Rails](https://github.com/docker/awesome-compose/tree/master/official-documentation-samples/rails/)を使用してひな形をすぐに手に入れようとしたら思った以上に面倒だった。
なので、再度環境を作るといったときに、同じ轍を踏まないようにメモを残そうかなと思った次第です。

サイトにあるものから変数名すら変えていないので、初学者の方はもしかしたらコピペで対応できるかもです。(初学者がWSL2で開発するかどうかは知りません。。。
### 環境
OS: Microsoft Windows 10 Home
WSLのLinuxディストリビューションは以下の通り
“`
$cat /etc/os-release
NAME=”Ubuntu”
VERSION=”20.04.5 LTS (Focal Fossa)”
“`
イン

元記事を表示

同一ページ内で同じインスタンスを複数箇所でキャッシュのキーとしたい

## ぶつかった問題
以下のような時、ビューの一部を避けて同じインスタンスをキーとしてフラグメントキャッシュを使いたいけれど、キーが重複されてしまうのでどうしたらいいのか。。と少し迷った。

インスタンスをキーとしたいのは、そのインスタンスのデータが更新されたらキャッシュも更新されるようにしたいため。

“`

<% cache @service do %>
# キャッシュしたい
# @serviceが更新されたらキャッシュを更新するようにしたい
<% end %>

# ここはキャッシュしたくない

<% cache @service do %>
# キャッシュしたい
# @serviceが更新されたらキャッシュを更新するようにしたい
<% end %>

“`

## 対処方法
以下のように配列の形でキーを設定できる。
左右を/で区切って一つの文字列としてくれる。
説明のため雑に1と2とし

元記事を表示

ActiveRecordで、特定のidを先頭に持ってきて並び替える

## 特定のidを先頭に持ってきたい
“`ruby
user_id = 5 # 特定のidは5とする
users = User.order(Arel.sql(“`users`.`id` = #{ user_id } DESC”))
“`

## その後に別の並び替え条件を指定したい
特定のidを先頭にしつつ、そのあとはpriority順で並び替えたい
“`ruby
users = User.order(Arel.sql(“`users`.`id` = #{ user_id } DESC,
`users`.`priority` DESC”))
“`

## さらにその後に別の並び替え条件を指定したい
特定のidを先頭にしつつ、そのあとはpriority順、そのあと(priorityが同じだったもの)はpriority2順で並び替えたい

“`ruby
users = User.order(Arel.sql(“`users`.`id` = #{ user_id } DESC,

元記事を表示

【capybara/RSpec】JS等の処理でhave_xxxのメソッドを使うテクニックと仕組み

先日、[capybara](https://github.com/teamcapybara/capybara)でJS等の処理を安定的にテストするテクニックを知ったのですが、その仕組みが気になって調べてみたので記事にしました。
## 不安定なテストの例
例えば、「Finish」というリンクをクリックすると、そのリンクのテキストが「Done」にJSで変わるテキストがあったとします。
(そのリンクには`task-status-link`のclassが付与されているとします)
その動作テストをcapybaraを使ったSystemSpecで書きたいとき、以下のようにするとテストが不安定になることがあります。

“`ruby:system_spec
RSpec.describe “Books”, type: :system do
it ‘sample test’ do
# 略
click_on ‘Finish’
expect(find(‘.task-status-link’).text).to eq ‘Done’
end
end
“`

Capybaraが`fi

元記事を表示

20万人が利用しているサービスのJSONシリアライザをAlbaに置き換えた話

# TL;DR
NewRelic transactions
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227205/89c86245-5fe4-f1e3-80f6-ded8500a219d.png)

# はじめに
株式会社KINECAでエンタメマッチングサービスを運営している@ryosk7です。
この記事はRuby on Rails Advent Calendar 2022の23日目の記事です。

# Albaって?
https://github.com/okuramasafumi/alba

AlbaはRuby製のJSONシリアライザです。
Ruby on Rails Advent Calendar 2022 14日目の記事にも、ちょうど作成者の[@okuramasafumi](https://twitter.com/okuramasafumi)さんが記事を執筆してくださってます。

https://qiita.com/okuramasafumi/items/b52c9c9e5d

元記事を表示

Railsでdatetimeのミリ秒でハマった話

# はじめに
仕事でコード書いていると、年に1回ぐらい日付関係の処理ではまるので、備忘録に記事を、まとめてました。

## 前提
DynamoDBを使用し、モデルは以下のように設定しています。

“`ruby
class Notification
include Dynamoid::Document
include Draper::Decoratable

table name: :notification, key: :notification_id
range :notified_at, :datetime

field :name, :string

private

def create_attrs(notification_id, name)
base = { id: id, notified_at: Time.zone.now, name: name }
end
end
“`

まず、何にハマったかですが、notification_idとnotified_atでユニークな値を取得できる様にしたのですが、なぜか取得できない。

元記事を表示

投稿に別のテーブルの情報を紐づける

タグ機能をCRUD2つ実装して実現しているイメージです。
「授業に受講している学生を登録したい」「コーディネートに洋服の情報を紐づけたい」「タグ機能をseedファイルを使わずに実装したい」etc…
こういったモデルの多対多の関連付けをした投稿を実装したい方は一度読んでみてください。

## 【 目次 】
1. 開発環境と前提
2. 概要と方針
3. 実装するコード

## 【 開発環境と前提 】
**< 開発環境 >**
・ruby 3.0.4
・rails 6.1.6

**< 前提 >**
・Studentモデル、コントローラーのCRUD機能実装済み
 ・カラムはname/string型

## 【 概要と方針 】
**< 概要 >**
・lesson投稿時に、登録されている学生を複数選択して投稿できるようにする。

**< 方針 >**
・Lessonモデル、コントローラーのCRUD実装
 ・カラムはname/string型
・中間テーブルの作成
・アソシエーションの記述
・viewの記述

**< 完成図 >**
※また貼っときます。

##

元記事を表示

Instance DoubleでMock化してMock化したインスタンスに値を設定

#概要

外部サービスをMock化して、Mock化したインスタンスに値を設定したいんだけど、瞬時に思いつかず色々調べた結果エラーメッセージに答えがあった話

エラーメッセージはちゃんと読まないとね(反省)

## 内容

“`
target = External.new
target.name = “dummy”
“`

これをMockしたかったので

“`
let(:external_mock) { instance_double(External) }
allow(External).to receive(:new).and_return(external_mock)
allow(external_mock).to receive(:name)
“`

こう書いたら

“`
# received unexpected message :name= with (“xxxx”)
“`

怒られた。

“`name“`で値を設定するときはどうすれば良いんだろうと思っていたら調べていたら、結局エラー

元記事を表示

メモ

Ruby基礎 2022/12/22
・変数を定義するときはビュー内ではなく、コントローラー内のアクションのアクションで定義することが一般的である
def index と end の間で定義するが 変数の前には@をつける。@をつけることによりアクション内で定義してもビュー内で利用できる

元記事を表示

RailsアプリにSchemaSpyを導入してER図を自動生成してみた(MySQL 8.0)

# はじめに
メタップスアドベントカレンダー第23日目です。

開発をしているとドキュメントを見ている時に 「あれ? 仕様と実装がちょっと違う??」 「このドキュメントが最後に更新されたのいつだろ??」 という状況に陥った経験がある方はいらっしゃるのではないでしょうか。

私は過去にRDBのリレーションを視覚的にパッと把握するためのドキュメントが見つけられない経験がありました。そこで、今回は**SchemaSpyを使ってER図を自動生成する方法**を試してみました。

## SchemaSpyとは
データベースの情報を元に、ER図、テーブル、カラムなどの情報をHTML形式のドキュメントとして出力するツールです。

# 検証
Railsアプリ、MySQL、SchemaSpyをコンテナ上で動かし、MySQLの情報をSchemaSpyで読み込み、ER図を作成していきます。SchemaSpyには [docker image](https://hub.docker.com/r/schemaspy/schemaspy/tags)を使用します。最終的なディレクトリ構成はこのようになります。

“`

元記事を表示

更新日時を全部更新しないようにするためのupdate_attributeとupdate_columnsの違い

?< [WEBCAMP ENGINEER COMMUNITY Advent Calendar 2022](https://qiita.com/advent-calendar/2022/webccamp-engineer-community) 23日目の記事です。
## 背景
大量のテーブルのとあるカラムを全て更新しようと思いました。

ただ、テーブルの`updated_at`が全部更新されてしまうのはちょっと怖いな…と思ったので良いメソッドがないか探したところ、ちょうどよく2種類用意されていたので、ここに簡単にまとめてみます?

## 結論
https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update_attribute
こちらを読んでいただければ正確にわかります。

せっかくなので一部説明します。

### update_attribute(name, value)

“`
Updates a single attribute and saves the record.
Th

元記事を表示

Stimulus リファレンス: 値

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/reference/values

特別なコントローラープロパティを使用してコントローラー要素の[HTMLデータ属性](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/data-*)を型付きの値として読み書きできます。

“`html

“`

“`javascript
// controllers/loader_controller.js
import { Controller } from “@hotwired/stimulus”

export default class extends Controller {
static

元記事を表示

Rails Renderデプロイガイド 【完全版】

# 背景
今回は、Herokuの代替案として有効的だったFly.ioが
クレジットカードを持たない人にサービスを提供しない方針になってしまったので
クレジットカードを持たない人向けにRender.comのデプロイ方法を
詳細にお伝えします?

この記事の通りに進めるだけでほぼ確実にデプロイできるはずなので
もし問題等がありましたら、コメントなどでお知らせください?

:::note warn
無料枠では、Renderのデータベースは90日まで+1つまでしか運用できません
こちらを了承できる方は進めていきましょう!
(90日後にDBを作成し直す必要がありそうです)
:::

# 手順
大きく以下の流れで進行します。
1. [PC上のアプリ内での準備](#pc上のアプリ内での準備)
1. [データベースの作成](#データベースの作成)
1. [Railsアプリとデータベースの接続](#railsアプリとデータベースの接続)

# PC上のアプリ内での準備
作成しているアプリの階層に移動しておきましょう!
移動するコマンド
`cd フォルダ名`

## Gemfileの編集
[公式](htt

元記事を表示

OTHERカテゴリの最新記事