Rails関連のことを調べてみた

Rails関連のことを調べてみた
目次

[Rails]stubを使うときは評価順序に気をつけた方がいいという話

# はじめに
皆さん`stub`は好きですか?私は正直嫌いです。しかし、外部と通信を行う機能を作成したりする時には切ってもきれない便利な機能です。今回はそんな機能を使うにあたって沼ったポイントがあったので共有していきます。

# 開発環境
– Ruby 3以上
– Ruby on Rails 6以上
– Minitest

# 最初に結論
`Object.new`を`stub`する際は、`.new`される前に引数が評価されるので注意が必要です。

これだけではわかりづらいと思うので、コードで例を見ながら解説します。

# ケーススタディ
以下のような外部とやり取りを行う、`GetterService`があったとします。外部通信を行うのは`GetterClient`なので、テストを行う際は`GetterClient.new`を`stub`することになります。
“` ruby
class GetterService < ServiceBase def call pp '1' data_list = getter_client.fetch_data_list

元記事を表示

Rspecにてcreated_atの検証で失敗する

# はじめに
RspecにてJSON形式のレスポンスデータを検証している際に、
`created_at`や`updated_at`にてデータが一致しないことで困っていた

# 困ってたこと

データ形式:
“`ruby
{
‘key’ => ‘value’,
‘created_at’ => ‘instance.created_at’,
‘updated_at’ => ‘instance.updated_at’,
}
“`

Timeオブジェクトはミリ秒の値まで含んでしまっているため、
データが一致せずにテストが落ちてしまう

“`plaintext
# 期待していたデータ
“created_at” => “2024-08-26T10:35:23+09:00”

# 実際に来たデータ
“created_at” => “2024-08-26T10:35:23.000+09:00”

“`

# as_jsonで試してみた

https://railsdoc.com/page/as_json

as_jsonではハッシュ形式に変換してくれるらしい

creat

元記事を表示

DataTaransferオブジェクトを使えばのvalue属性に値をセットするのと近しいことができる

## 背景

JavaScriptで``のvalue属性に値を直接設定することはできません。

これは、セキュリティ上の理由で、悪意のあるスクリプトがユーザーのローカルファイルを勝手にアップロードすることを防ぐためです。
ブラウザはファイル選択ダイアログを通してユーザーが手動でファイルを選択することを要求します。

しかし、``のvalue属性に値をセットするようなことと近しいことをしたくなる場合もあると思います。(かなりマイナーなケースかもしれませんが)

そのような場合に`DataTransfer`オブジェクトが使えます。

私が遭遇したケースでは、RailsのViewテンプレートからReactのファイル選択コンポーネントを呼び出しているパターンで、そのようなことをしたくなりました。

RailsのViewでは[nested_form](https://github.com/ryanb/nested_form)というgemの`nested_form_for`メソッドでフォームが作られており、そのフォームの中

元記事を表示

Dockerでのエラー例①「docker compose exec web bin/devが上手くいかない」

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

## ターミナルでのエラー文
“`:ターミナル
docker compose exec web bin/dev
WARN[0000] /xxxxx: `version` is obsolete
service “web” is not running
“`
※この時docker compose upでコンテナは起動しています。
webに関することも記述しています。

## 原因?

“`:config/routes.rb
Rails.application.routes.draw do

省略

Your::Application.routes.draw do
mount LetterOpenerWeb::Engine, at: “/letter_opener” if
Rails.env.development?
end
end
“`
gem let

元記事を表示

Rails7から追加されたレ楽にレコードを任意の順番に並び替えられる「in_order_of」

# はじめに

業務で「何かのレコードを特定のid順や数字で並べたい」みたいな要件に出会った経験ある人もいるのではないでしょうか?

当時エンジニア歴2年目の時に詰まった記憶があります笑

そのような時はどうやって実装しますか??

色々書き方はあると思いますが、***Rails7から追加***された“`in_order_of“`というメソッドが便利だったので紹介します。

https://railsdoc.com/page/in_order_of

# in_order_ofを使わない方法

まずは“`in_order_of“`を使用しない方法を考えようかと思います。

“`in_order_of“`の説明だけ見たい人はここは飛ばしてください。

*前提条件

モデル: User
並び替えカラム: id
並び順: [3,2,1]
PostgreSQL使用

“`ruby
ids = [3,2,1]
“`
*実際のクエリは変数を使っているので“`in ($1,・・・)“`みたいになってますが、本題とは関係ないので簡略化しています。

## 1.whereを使って実装

元記事を表示

dockerでrails new する one liner

# これはなに
`docker` で `rails new` するコマンドラインの備忘メモ
“`
docker run –rm -v $(pwd):/app ruby:3.3 bash -c “gem install rails; cd /app; rails new -B -d mysql
“`

# メモ
`-v $(pwd):/app`
コマンドを実行するカレントディレクトリを `/app` にマウントする
このディレクトリ直下に、 `` が作成される。

`ruby:3.3`
使用するdockerイメージ。
ruby 公式からバージョンを選択

`gem install rails;`
ここで、`rails` をインストールする。
必要に応じて、optionを指定

`rails new -B -d mysql;`
ここで、 `rails new` を実行。
`db` に `mysql` を指定

``
作成したい `project-name`

元記事を表示

古いバージョンのNodeやRubyで作ったアプリをherokuでデプロイする際の設定

## この記事の内容
### 起きたこと
herokuを使って講座で作成したWebアプリをデプロイしようしたところ、なにやらたくさんエラーが起こりました。
おきたエラーの詳細はエラー詳細に記載しています。

### 前提(バージョンなど)
– Ruby:2.7.7
– Rails:6.0.6.1
– Node.js:14.15.0
– Windows11でUbuntu(WSL2)を導入

### 原因
– Rubyのバージョンがherokuの最新バージョンに対応していなかった
– Nodeのバージョンがherokuが標準で使用するバージョンと異なっていた
– buildpackを導入していなかった

## エラー詳細1
### エラーメッセージ
“`
!
! The Ruby version you are trying to install does not exist on this stack.
!
! You are trying to install ruby-2.7.7 on heroku-22.
!
! Ruby ruby-

元記事を表示

RSpecで快適にテストを書こう!初心者から上級者まで使える15のテクニック

## はじめに

RSpecは Ruby on Rails アプリケーションでよく使用されるテストフレームワークです。しかし、初めて触れる方にとっては少し難しく感じるかもしれません。この記事では、RSpecの基本から応用まで、15の章に分けてわかりやすく解説します。各章では、具体的なコード例と詳細な説明を提供し、RSpecの理解を深めていきましょう。

## 1. RSpecの基本構造

RSpecのテストは通常、`describe`ブロックで始まります。これはテスト対象を示すもので、クラスやメソッド名を記述します。その中に`context`ブロックを置き、特定の状況や条件を表現します。実際のテストは`it`ブロックの中に書きます。

“`ruby
describe User do
context ‘有効なユーザーの場合’ do
it ‘バリデーションが通る’ do
user = User.new(name: ‘山田太郎’, email: ‘yamada@example.com’)
expect(user).to be_valid
end

元記事を表示

Ruby on Railsの実務(viewの修正業務)をはじめるときに読んでほしい記事

## はじめに

株式会社シンシアでは、実務未経験のエンジニアの方や学生エンジニアインターンを採用し一緒に働いています。

弊社では、未経験エンジニア・学生インターン生の方が多くRuby on Railsを勉強しているので、入社後はまずRuby on Railsのプロジェクトにアサインし、初日から自社サービスのセットアップ・業務コードを書かせるようにしています。

※ シンシアにおける働き方の様子はこちら

https://www.wantedly.com/companies/xincere-inc/stories

初日からコードを書いて、PRを出すようにしているのですが、初日はまずは簡単なviewの修正業務をしてもらうことが多いです。

Viewの修正業務は

– 修正するファイルを特定する
– classやstyleを修正する

というステップですが、今回は特に**修正するファイルを特定する**ということに焦点を当てて記事を書いていきます。

この記事は

– Ruby on Railsを学び終わったばかりの人でRuby on Railsの業務(Viewの修正業務)を任された人

元記事を表示

Ruby on Railsでコネクションプールを導入したredis-rbの導入方法

# 始めに

Ruby on Rails では、Redis を利用して一時的に値を保持するケースが多々あると思います。(たとえば、カート情報の管理やカウント処理など)
もし Redis の String 型のバリューのみで要件を満たせるのであれば、[Railsのキャッシュ機構(低レベルキャッシュ)](https://railsguides.jp/caching_with_rails.html#%E4%BD%8E%E3%83%AC%E3%83%99%E3%83%AB%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5)を利用するだけで、Redis を簡単に扱うことができます。

Rails の `cache_store` に `:redis_cache_store` が設定されている前提で、以下のように Redis を利用できます。
“`ruby
# 取得
Rails.cache.read(key)

# 保存
Rails.cache.write(key, value)

# 削除
Rails.cache.delete(key)
“`
しかし、も

元記事を表示

Rails マイグレーションで1個のテーブルの特定のカラムの照合順序を変更する

# 例

マイグレーションの正当な構文で実現できる方法が見つからなかったため、SQLを直接実行してしまう

“`rb
class ChangeCollation < ActiveRecord::Migration[7.2] def up execute('ALTER TABLE example_table MODIFY `column_name` VARCHAR(255) COLLATE utf8mb4_bin') end end ``` `ActiveRecord::Base.connection.execute` ではなく `execute` だけで書けるようだ # schema マイグレーションを実行すると schema.rb の情報も変わってくれる ```rb create_table "example_table", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.string "column_name", collation:

元記事を表示

【Ruby on Rails】ルーティングで困ったroutes.rbについて振り返ってみる

こんにちは。あがさんです!!

見様見真似でRuby on Railsの学習をしています。
Railsガイドやチュートリアルが丁寧に教えてくれるので、分からない点があってもなんとなくアプリケーションが出来上がってしまいます。(凄い!けどなんとなくは良くない)

今回はRailsでアプリケーション開発をしていた際に、苦手意識を持っていたroutes.rbと
親の顔よりも見たlocalhost:3000/rails/info/routesのページについて触れていきます。

## ルーティング とは
Ruby on Railsにおいて、アプリケーション内のURLをコントローラのアクションに結びつける仕組みのことです。config/routes.rbファイルで定義します。
下記は簡単なroutes.rbのファイルです。

“`routes.rb
Rails.application.routes.draw do
# CRUD routes without using resources
get ‘users’, to: ‘users#index’
get

元記事を表示

キャッシュ機能の差でActiveStorageではなくCarrierwaveを使うことにした

## これは何?
railsのファイル管理機能で、ActiveStorage vs Carrierwave論争はよく聞く。

> [Ruby on Rails】ActiveStorageの概要とその利点、弱点](https://zenn.dev/s17w09/articles/d91b274b2f2116)
> [ActiveStorage vs CarrierWave](https://qiita.com/w5966qzh/items/510d4c2a3829524b2e64)
> [画像管理をActiveStorageからCarrierWaveへ乗り換えた話](https://tech.dely.jp/entry/2019/12/22/145733)
> [Catch allルーティングとActive Storage](https://qiita.com/jkr_2255/items/60d4e5859a711258f97c)

プレビュー機能の実装にはCarrierwaveのキャッシュ機能が必要だったので、備忘録として記述する。

## 要件
### 開発アプリケーション概要

元記事を表示

DockerでRailsとMySQLの開発環境を構築する方法

## はじめに
今回、Rails 7とMySQL 8.0の開発環境を構築する際にDockerを使用してみました。環境構築の手順を具体的に説明しながら、注意点やエラー解決の方法についての説明していきます。

## 必要なファイルの作成
まずは、以下のコマンドを使用して、必要なファイルを作成します。
“`
touch Dockerfile docker-compose.yml Gemfile Gemfile.lock entrypoint.sh
“`
このコマンドは、zshシェルを使用している場合にファイルを5つ一度に作成するためのものです。

## Dockerfileの設定
次に、Dockerfileの内容を以下のように記述します。
“`
# Rubyの公式イメージを使用
FROM ruby:3.2.5
ARG RUBYGEMS_VERSION=3.3.20

# 作業ディレクトリを指定
WORKDIR /myapp

# ホストのGemfileをコンテナ内にコピー
COPY Gemfile Gemfile.lock /myapp/

# bundle installを実行
RU

元記事を表示

【Rails】ボタン内でtextを改行して上と下で別のclassを指定したい。

## こういうボタンを作りたいときに困ったので

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3723972/60608f54-925a-9ae6-f20e-76b524add04a.png)

## 書き方が分からなかったので試行錯誤した

“`ruby:qiita.erb
<%= submit_tag "規約を確認のため、\n投稿する", class:'hobehoge',name:nil %>
“`
のように書くと改行はできるけど、こんな感じになってしまう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3723972/67bba1e5-3f1d-d56c-fe78-e57428bd4bf8.png)

「規約を確認の上、」の部分と「投稿する」の部分で別のcss定義を反映したい。

“`ruby:qiita.erb
<% submit_label "

元記事を表示

RailsのMinitestで処理実行前後の差分テストをスマートに書きたい

# ざっくりで言うと
処理実行前後の差分テストを行う時は、以下のメソッドを使うって話です。
– assert_changes
– assert_difference
– assert_no_changes
– assert_no_difference

# どれぐらいスマートに書けるか
以下二つのテストコードを比較してください。
## 上記のメソッドを使わなかった時
“`ruby
test ‘ユーザーを作成’ do
before_count = User.where(‘hoge’).count

# ユーザー作成処理
post users_path, params: { name: ‘hoge’ }

after_count = User.where(‘hoge’).count

assert_equal(1, after_count – before_count)
end

test ‘ユーザーをプレミアム会員に変更’ do
before_grade = User.find(1).gread
assert_equal before_grade, ‘REG

元記事を表示

hamlでリンク先に飛べるボックスを作る方法

# はじめに
今回は、railsにてhamlを用いてXのリンク先に飛べるボタンを作り方を簡単にまとめたいと思います。

# 1.HAMLでのリンク生成
まず、HAMLファイルでリンクを生成する方法についてです。
以下のコードでXとInstagramとTikTokリンクに飛べる箱ができます。
“`
= link_to ‘X’, ‘‘, target: ‘_blank’, class: ‘box’, rel: ‘noopener’
“`
###### 簡単な説明
* link toヘルパーで指定したテキストが表示されます。上記の場合「X」のテキストで表示されます。
* link toの隣にリンク先のURLを記入します。(直接記入する場合)
* target: ‘_blank’ で新しくタブを開いて表示してくれます。
* class でcssを適応させるようにします。
* rel: ‘noopener’ も追加することでセキュリティを向上させることができます。

# 2. コントローラー設定
hamlで直接リンクを挿入した場合、コントーラーファイルに以下のコードを設定する

元記事を表示

【個人開発】詐欺被害を減らしたい!詐欺を未然に防ぐためのアプリ「詐欺師の手帳」を開発しました📒

## はじめに
こんにちは! yukimuraと申します
未経験からのWebエンジニア転職を目指して、2023年11月からプログラミングスクール「RUNTEQ」に入学し、Ruby on Railsを中心にプログラミング学習を行っております。

今回「詐欺師の手帳」というアプリをリリースしました。
詐欺被害を未然に防ぐことを目的としております。

## アプリ紹介
[![Image from Gyazo](https://i.gyazo.com/7f2c2cfc4ad0b3f2699ed538ab8fc41a.png)](https://gyazo.com/7f2c2cfc4ad0b3f2699ed538ab8fc41a)

### サービスURL(レスポンシブ対応済)
https://scammers-notebook.com/
### GitHub URL
https://github.com/yuki51b/scammer-s-notebook

## 開発背景
 自分自身や家族、友人などが詐欺被害に遭った経緯から、詐欺は身近であると同時にYoutubeなどで多くの人が詐欺に引っ

元記事を表示

【Rails】Minitestでのスタブとモックの使い方 入門

# はじめに
この記事は、RubyやRailsプロジェクトでMinitestを使ったことがあるけれど、スタブやモックについて理解がちょっと曖昧かも…という方のためにスタブやモックの基本的な考え方、使い方を解説するものです。

# スタブ、モックってそもそも何?

まずは、言葉の意味や基本的な使い方を見ていきます。

### スタブとその使い方
スタブというのは、「代用品」みたいな意味合いで使われます。Minitestでは主に、メソッドスタブというものを用意します。つまり、「代用メソッド」ですね。以下のように、自分の好きなようにメソッドの戻り値をセットできます。

“`ruby
require ‘test_helper’
require ‘minitest/autorun’

# 自己紹介ができる「パーソン」というクラスを例に取る
class Person
attr_reader :name, :age
def initialize(name, age)
@name = name
@age = age
end

def introduce_mysel

元記事を表示

退職して560万円相当の工数をかけてお金を稼ぐサービスを開発した

※ 前職の月額単価80万円を基準に、7ヶ月分の工数として560万円相当と換算。

## [BizRank](https://biz-rank.com/)

![BizRank – モック](https://github.com/user-attachments/assets/969e52bf-5e14-44af-8f37-f231edf5d791)

![BizRank – モック2](https://github.com/user-attachments/assets/073e69e6-ee6b-496a-9ebb-b6807519cebb)

※キャッシュがなくてコールドスタートとなる場合があります。その場合レスポンスが返るまでに2~3分ほどかかります。ご了承ください。

ビジネス書籍を紹介するサービスです。

自分が書籍を購入する際に、SNSでバズっている書籍をなんとなく購入しがちという所から、影響力ある人が薦める、おすすめの一冊を独自のアルゴリズムで評価してランキング形式で紹介します。

1月から退職して設計を始めて8月27日に人生初サービスをリリースする事ができました。

元記事を表示

OTHERカテゴリの最新記事