Rails関連のことを調べてみた2023年10月05日

Rails関連のことを調べてみた2023年10月05日
目次

【Rails 7】Bootstrapのインストール

# 開発環境
Rails 7.0.8
Ruby 3.1.3
Bootstrap 5.3.0.alpha3
# 導入手順

## 1.Gem導入

Gemgileに以下2つのgemを追加
“`ruby:Gemfile
gem ‘bootstrap’, ‘~> 5.3.0.alpha3’
gem ‘jquery-rails’
“`
ターミナルにて、インストール
“`:terminal
bundle install
“`

## 2.CSS編集
app\assets\stylesheets\application.cssを”.csss”に変更
中身を全て消して以下のコードに変更
“`scss:application.scss
@import “bootstrap”;
“`

## 3.javascriptの設定
### a) Configファイルの編集
config\importmap.rb
以下のコードを追記(位置はどこでも良い)

“`ruby:importmap.rb
pin “bootstrap”, to: “bootstrap.min.js”, preload: tr

元記事を表示

Time.atとTime.zone.atの違いについて

## Time.at
* Rubyの組み込みメソッド。
* 指定した時刻のTimeオブジェクトを返す。
* キーワード引数inでタイムゾーンを指定できる。
* タイムゾーンの指定がなく引数が数値の場合、生成されたTimeオブジェクトは地方時になる。

“`ruby
# Timeオブジェクト、もしくは起算時からの経過秒数を表す数値を指定する
Time.at(0) #=> 1970-01-01 00:00:00 +0000

# “+HH:MM” や “-HH:MM” のような形式の文字列か,”UTC”などでタイムゾーンを指定する
Time.at(1582721899, in: “UTC”)  #=> 2020-02-26 12:58:19 UTC
“`

## Time.zone.at
* Ruby on Railsのフレームワークにおいてタイムゾーンを取り扱うためのクラス。
* TZInfoというRubyのタイムゾーン情報を扱うためのライブラリを利用していて、`TZInfo::Timezone` インスタンスをラップして、Railsでの使用に適したインターフェースを提供する。
*

元記事を表示

WebアプリをDocker化する方法 (rails)

## はじめに
今回github上にある既存のrailsプロジェクトをdocker化したので自身のアウトプットも含め記事にしました。

簡単にDockerとは開発環境や実行環境などをチームで同じものを使うための(コンテナ型仮想化という技術を用いて開発する)アプリケーションです。

最近の技術にDockerがよく使われるようになっていてモダンな開発現場には必須知識だそうです。

大まかなコードはDocker document jpを参考にしました。

https://docs.docker.jp/compose/rails.html

## Docker化
railsアプリをdocker化していきます。
既存railsアプリに新規作成するファイル
* Dockerfile
* docker-compose.yml

編集確認するファイル
* Gemfile
* database.yml

#### Gemfile
今回railsを使うということでrubyのバージョン確認とそれに対応したrailsのバージョンであるかを確認します。

“`ruby:Gemfile
source “ht

元記事を表示

storage.yml の active_storage service を変更すると 500 エラーで画像が表示されなくなる問題

# storage service 名は DB に保存されている
storage service を変更すると以下のようなエラーが表示される。

“`
KeyError in ActiveStorage::Blobs::RedirectController#show
config.active_storage.service
“`

## service名を変更するとDBとの整合性が取れなくなる

“`rb: production.rb
config.active_storage.service = :product
“`

“`rb: production.rb
config.active_storage.service = :user
“`

## 原因は保存時に service 名がDBに保存されているから
原因としては、画像を保存する際に Rails が自動的にDBにどの storage に保存したのかを書き込んでくれているからだ。

“`rb: product.rb
class Product < ApplicationRecord has_one_at

元記事を表示

【Ruby・Rails】mergeメソッドの2つの働き

## 先に結論
Rubyにおける場合と、RailsのActiveRecordにおける場合でmergeメソッドの処理が変わる。

## Rubyのハッシュの **merge** メソッド

**2つのハッシュを結合して新しいハッシュを作成します。**
このメソッドは、ハッシュのキーと値を結合し、重複するキーがある場合は後からマージされたハッシュの値が優先されます。

以下は、**merge** メソッドを使用して2つのハッシュを結合する例です。

“`ruby
hash1 = { a: 1, b: 2 }
hash2 = { b: 3, c: 4 }
merged_hash = hash1.merge(hash2)

puts merged_hash
=> **{ a: 1, b: 3, c: 4 }**

“`

## RailsのActiveRecordにおける **merge** メソッドは

**クエリ条件を結合するためのメソッドです。**
これは、データベースクエリに対して追加の条件を結合するために使用されます。例えば、**where** や **joins** の条件を

元記事を表示

【Rails】システムスペックで日本語のファイル名をダウンロードするとファイル名が “download” になってしまう場合の対処法

## 発生した問題
Railsのシステムスペックでファイルダウンロードの機能をテストしようとしたが、日本語を含むファイル名だとファイル名がなぜか “download” になってしまう。

“`
# 期待するpath
/path/to/downloaded_files/ほげほげ.txt

# 実際のpath
/path/to/downloaded_files/download
“`

以下は失敗するテストコード(ヘッドレスChromeを利用するシステムスペック)の例。

“`ruby
click_link ‘ダウンロード’

# wait_and_find_download_file は自作のヘルパーメソッド、という想定
download_path = wait_and_find_download_file

expect(download_path).to end_with “ほげほげ.txt”
#=> Failure/Error: expect(download_path).to end_with “ほげほげ.txt”
#=> expected `”/path/to/do

元記事を表示

mach-o file, but is an incompatible architecture (have ‘x86_64’, need ‘arm64e’)

## エラー内容
`rails new`しようとしたところ次のエラーが発生。
“`
$ rails new .
:148:in `require’: dlopen(/Users/hoge/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/stringio-3.0.8/lib/stringio.bundle, 0x0009): tried: ‘/Users/hoge/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/stringio-3.0.8/lib/stringio.bundle’ (mach-o file, but is an incompatible architecture (have ‘x86_64’, need ‘arm64e’)), ‘/usr/local/lib/stringio.bundle’

元記事を表示

Railsでよく使うコマンドをまとめてみた。

本記事では、Railsのよく使うであろうコマンドについてまとめていきます。

# 目次
– [はじめに](#はじめに)
– [開発中よく使う](#開発中よく使う)
– [railsのアプリ起動](#railsのアプリ起動)
– [コンソールの起動](#コンソールの起動)
– [テストの実行](#テストの実行)
– [何かを作りたい](#何かを作りたい)
– [新しいアプリケーション](#新しいアプリケーション)
– [様々な種類のファイル](#様々な種類のファイル)
– [データベース](#データベース)
– [マイグレーション関係](#マイグレーション関係)
– [未実行のマイグレーションファイルの実行](#未実行のマイグレーションファイルの実行)
– [マイグレーションの状況を確認](#マイグレーションの状況を確認)
– [テーブルの初期化](#テーブルの初期化)
– [データベースに初期データを入れる](#データベースに初期データを入れる)

# はじめに
私は、言語をはじめたてでコマンドを覚えてい

元記事を表示

既存のrailsアプリをdockerを用いてコンテナ化する

# ゴール

既存のrailsアプリを
docker,docker-composeがインストールされているPCであれば、
**個人PCの環境に左右されることなく**[ローカル](http://localhost:3000)にて再現できるようにする。

# 事前準備
* 以下の環境にてローカルで動作確認済みのrailsアプリ
“`ver.
ruby 3.2.2
Rails 7.0.6
postgresql 12
“`

* docker,docker-composeのインストール

https://docs.docker.com/engine/install/

https://docs.docker.jp/v1.12/compose/install.html

# 手順

**1.Dockerfile、doccker-compose.ymlの作成と記述**
**2.database.ymlファイルの編集**
**3.コンテナ生成と実行**
**4.動作確認**

順番に解説していきます。

### 1.Dockerfile、docker-compose.ymlの作成と記述

元記事を表示

Railsのレスポンスに関連するメソッドまとめてみた

# Railsのレスポンス `response` について

Railsにおける`response`オブジェクトの基本的な使い方や特性についてまとめています。

## 目次
– [レスポンスの内容を文字列で取得](#レスポンスの内容を文字列で取得)
– [レスポンスのcharsetを取得](#レスポンスのcharsetを取得)
– [レスポンスクッキーをハッシュに変換して取得](#レスポンスクッキーをハッシュに変換して取得)
– [HTTPステータスコードに対応するメッセージを取得](#HTTPステータスコードに対応するメッセージを取得)
– [コンテントタイプを設定](#コンテントタイプを設定)
– [パスに格納されているファイルをレスポンスボディとして返す](#パスに格納されているファイルをレスポンスボディとして返す)

## 逆引き

## レスポンスの内容を文字列で取得

#### 説明
レスポンスの内容を文字列で取得
#### 使い方
“`ruby
response.body()
“`

## レスポンスのcharsetを取得

#### 説明
レスポンスのcharse

元記事を表示

【Ruby】すでに投稿されているものを投稿できないようにする

# はじめに
大学生限定 プログラミングコミュニティ 『GeekSalon』で活動しているWebメンターの者です!
もし少しでも興味がありましたら、ぜひお話を聞きにきてください!

# 前提
この記事でできることを紹介します!
バリデーションを使い、すでに投稿されているデータは投稿できないようにする機能をつけます

**例)Vaundyについて投稿している人がすでにいる場合、Vaundyについては投稿できないようにする**

**前提:投稿機能の実装が完了していること**

**注意モデルはmusic,カラムはcontentになっているので、各々適切なものに修正してください**

# バリデーションの追加

**そもそもバリデーションとは?**
投稿フォームで何かを投稿するとき、「入力必須項目」というのを目にしたことはないでしょうか?

例えば「名前やメールアドレス、パスワード」などです。このとき、入力必須項目に何も入力しなかった場合、投稿ができないようにしたいですね。

他にもパスワードなどは4文字以上であるとか、すでにデータベースに存在しているメールアドレスで登録できないようにする

元記事を表示

zendeskの記事をコピペする

## やりたかったこと
zendeskのブランドAの記事をブランドBにコピーしたかった。
ブランドAの記事をブランドAの別セクションに保存するということもできると思う。

## 方法
zendeskがAPIを用意してくれているのでそれを使う。
スクリプトはrailsで書いた。

[API を使用してヘルプセンターの記事のコピーを公開および同期する](https://support.zendesk.com/hc/ja/articles/4409408035610-API-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%98%E3%83%AB%E3%83%97%E3%82%BB%E3%83%B3%E3%82%BF%E3%83%BC%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E3%82%B3%E3%83%94%E3%83%BC%E3%82%92%E5%85%AC%E9%96%8B%E3%81%8A%E3%82%88%E3%81%B3%E5%90%8C%E6%9C%9F%E3%81%99%E3%82%8B)

元記事を表示

【プログラミング初心者の学習方法】自走力を意識したgemの学び方、ReadMeの読み解き方

### はじめに

こんにちは、駆け出しWebエンジニアを目指して学習中の「さば?」[@saba7678pg](https://twitter.com/saba7678pg)と申します。

:::note warn
技術記事の練習も兼ねて、プログラミング勉強中の身で書かせていただきました。
引用元などの情報に注意しながら書かせていただきましたが、
至らぬ点・誤った知識等が記載されている可能性がございます。

何かございましたらお手数ですがご指摘いただけますと幸いです。
:::

### 今回の記事の対象者
– Ruby,Railsについて学習中
– 最低でもProgateは一通り終えている
– Google Chromeを使用している
– あると便利なChatGPT(本家、Bing等なんでも)

### 初学者のプログラミング勉強方法

今回はタイトルに「自走力」というキーワードを入れてあるように、
自分で調べる力を養いつつ技術を学ぶにはどうしたらよいのか、というテーマで、
**自分自身で実践してみながら**今回の記事を書いております。

勉強の仕方については人それぞれという部分もあ

元記事を表示

【Rails】ついついrubocopを通し忘れてしまう全ての方へ!commitと同時に自動でrubocopを通す設定方法!

# はじめに
お疲れさまです!
おおくまです!

以前、私は**rubocop**を現在実装中のアプリに導入しました!
(その際の記事はこちら[【Rails】rubocop導入手順の備忘録](https://qiita.com/kumaryoya/items/e2e12bb503fe56404329))
しかし!
それからというもの、~~いつも~~たま〜にrubocopを通すのを忘れてしまいます!笑
そこで!
commitすると自動でrubocopを通してくれる便利な機能があることを知りました!
今回はその設定方法の備忘録になります!

# 環境
Ruby 3.2.2
Rails 7.0.8

# 注意点
:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合があります。
コメント等で教えていただけると幸甚です。
:::

# 実装
今回使用するツールは、[lefthook](https://github.com/evilmartians/lefthook)というツールです!
これはGitフック管理ツールの1つで、特定のGitイベント(コミット前、プッ

元記事を表示

【Rails】libffi.so.7: cannot open shared object file: 解消法

## 状況
Rails7de`image-processing`を使用して画像処理をしようとしたところ表題のエラーが発生しました。

## 解消法

以下のコマンドを実行することで解消しました。

“`terminal
bundle pristine ffi
“`

## 参考

https://github.com/ffi/ffi/issues/881

元記事を表示

【Rails】Active Storage の役割をざっくりイメージしてみる

# はじめに
はじめまして?
自分は現在プログラミングスクールでRuby on Railsを中心に勉強中の者です。
今回は学習する中で Active Storage が何をしてくれるのかを理解するのに苦労したので、初学者なりにまずは全体のイメージを掴むために整理してみました。

:::note warn
今回は全体のイメージ(流れ)をざっくり掴むのが目的なので、読んでて「補足したい・・!」と思われる部分が多くあると思いますが、そこはご了承ください・・・?
また、自分がプログラミング初学者のため、内容に誤りがあれば優しくコメントで教えてください・・?
:::

# 概要

?Active Storageとは何者?
?Active Storageの導入方法
?Active Storageが提供する3つのテーブルについて(今回のメイン)
?説明しきれなかったこと
?まとめ

# ?Active Recode とは何者?

Railsガイドの説明はこう。

> Active Storageは、Amazon S3、Google Cloud Storage、Microsoft Azure Stor

元記事を表示

Rails Tutorial 第11章

## 演習1
>現時点でテストスイートを実行すると green になることを確認してみましょう。

何も問題がなければGREENになるはずです

>表 11.2の名前付きルーティングに_pathではなく_urlを使っている理由を考えてみましょう。(ヒント: 私たちはこれから名前付きルーティングをメールで使います。)

_path は例えば 
user_path
→’/user’
のようにrails 内で使用されているルートであれば_pathを使用できるという事です

_urlは
‘http://www.example.com/user’
のように完全なURLを返してあげる必要があります。
それは_pathと違い外部からのアクセスとなるためです

まあ_pathは家では”花子ちゃん”でも良いけど
_urlは、外に出たら”山田花子さん”と呼びなさいって感じですかね(意味不明)

## 演習2
>本節の変更を加えた後も、テストスイートが引き続き green になることを確認してみましょう。

rails testを行い、GREENになっていたらOKです

>コンソールからUserクラスのイ

元記事を表示

【個人開発】予定決めを急かしてくれるLINEbotアプリを開発してみた

# はじめに
皆さんは友達と予定を立てる時ぎりぎりまで予定が決まらないなんてことはありませんか?
今回、このあるあるに焦点を当てたアプリを開発したのでご紹介いたします!

# 作成したアプリ
アプリ名:そろそろ決め代
サービスURL:https://sorosorokimeyo.com/
Github:https://github.com/ryosuke1212/chousei_boy
![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3559534/4ae436ce-6f30-6051-d06e-d6d98ba243bd.png)

# 開発の背景
定期的に会う友達グループがあるのですが、会う日が決まっても何をするのかがなかなか決まらないということがあります。特に、会うことが目的になっていると会って何をするか決めるのは二の次になってしまいます。

回りの友人に聞いてみるとそのような経験をしている人が多く、理由として次のような点が挙げられました。

– 他の人に決めてほしいとどこかで思っている

元記事を表示

elasticsearchのrefreshに関して

## はじめに
elasticsearchには[Refresh API](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-refresh.html)なるものが存在する。
ドキュメントをインデックスしたら即検索できるようになると考えていた自分は、このrefreshを意識せずelasticsearchを使用していたため、elasticsearchの絡むテストを書くときにハマりかけた。今回はrefreshに関する備忘録を残しておく。

## なぜrefreshが必要なのか?
前提として、elasticsearchではドキュメントをインデックスしただけで検索可能な状態になるわけではない。追加されるドキュメントは一旦In-memory bufferという領域に溜め込まれた上で、まとめて検索対象にとして反映されるようになっている。
このIn-memory bufferに溜め込まれたドキュメントを検索対象として反映する処理がrefreshと呼ばれている。

https://www.elastic.co/g

元記事を表示

フォロー機能と同じテーブル構造で複数チェックボックスの管理方法を考えてみた

# 実現したいこと
同じテーブル同士で1つのに対して、複数の同じテーブルのレコードを紐づけてチェックボックスで登録できるようにする。
例えば、
– ユーザーの一括お気に入り機能
– 一括ブロック機能
– アイテムをひとまとめにするアイテム

などが挙げられます。

記事にした経緯として、
– 探しても実装事例が全く見つからなかった
– この発想に至るまでハマって時間を無駄にした

というものからです。

### 開発環境
– Ruby 3.0.2
– Rails 7.0.3.1

### オーソドックスな管理方法
よくある例として車とパーツの関係でテーブル設計をしてみました。
利用例としては、車に対して装着したいカスタムパーツにチェックを入れる想定です。

※ストロングパラメーターの設定は、実装例が多くあるため割愛しております。

### テーブル設計
cars
| カラム名 | 型 |
| —— | —— |
| id | integer |
| name | string |

car_parts
| カラム名 | 型 |
| —— | –

元記事を表示

OTHERカテゴリの最新記事