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

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

【rails】rubyXLを使って別途用意したエクセルファイルを出力する機能を作成

### railsで別途用意したエクセルファイルを出力する機能を作成したので、備忘録用に簡単にまとめる。
rubyXLは初めて使い、エンジニア歴も浅いため至らないコードもあるかと思いますが、参考程度になればと思います。

railsのバージョンは`Rails 6.0.3.4`
使用したgemは`rubyXL`です。

## Gemfileのインストール
まずはrubyXLをインストールします。
“`ruby:Gemfile
gem ‘rubyXL’
“`
“`
$ bundle install
“`

## helperを作成していきます。
“` ruby:app/helpers/excel_helper.rb
module ExcelHelper
require ‘rubyXL’

def generate_excel
template_path = Rails.root.join(‘public’, ‘files’, ‘template.xlsx’) ## 別途用意したエクセルファイルを配置し、そのパスを記述します。
workbook = Ruby

元記事を表示

rubyXLで作成したエクセル出力機能を呼び出すとActionController::UnknownFormatが発生した時の対処法

#### エクセルファイル(.xlsx)を出力する機能をrubyXLを利用して作成したが、実行するとActionController::UnknownFormatが発生が発生する。

###### railsのバージョンは`Rails 6.0.3.4`です。

#### 原因
原因はroutes.rbの設定でformatを指定していないことになる。
“`routes.rb
get ‘excel/generate’, to: ‘excel#generate’, as: ‘generate_excel’
“`

xlsxのエクセルファイルを出力する場合は、
~~~ruby
get ‘excel/generate’, to: ‘excel#generate’, as: ‘generate_excel’, defaults: { format: :xlsx }
~~~
のように、
`defaults: { format: :xlsx }`
の箇所を追記するとエラーが解消される。
拡張子は出力したいファイル毎に変更してください。

初歩的なことかもしれませんが、自分の備忘録用と初学者の方々の

元記事を表示

【トリビア】Railsのコントローラに出てくるparamsはハッシュじゃない

## はじめに
Railsに関するトリビア的なネタです。

QiitaやZennを見ていると、ときどきRailsのコントローラに出てくるparamsをハッシュ(Hashオブジェクト)だと説明している記事を見かけます。

**しかし、paramsはハッシュではありません。**

## 確かめてみよう

こんな感じでparamsの中身をputsしてみましょう。

“`ruby
def show
puts params
end
“`

うん、とてもハッシュっぽいですね。

“`
{“id”=>”1”, “controller”=>”projects”, “action”=>”show”}
“`

では、こうするとどうでしょうか?
paramsがハッシュならどちらもtrueになるはずです。

“`ruby
def show
# paramsがハッシュそのものならtrue
puts params.instance_of?(Hash)
# paramsがHashクラスを継承していればtrue
puts params.is_a?(Hash)
end
“`

結果は

元記事を表示

待ち時間が長くなってきたら、95パーセンタイルの最適化を検討しよう

飛行機でとても驚くべき体験をしました。

東京から北海道の札幌まで、日本の国内線を利用した時のことです。90分ほどのとても短いフライトです。

搭乗時、普段よりも搭乗にかかる時間が短いなとは感じていたものの、その理由は分かりませんでした。そのうち、搭乗グループが、ロイヤリティステータスや他の任意のグループに沿ってではなく、実際の機内での位置に従っていることに気づきました。これは、CGP Greyの[「飛行機に速く搭乗する方法」](https://www.youtube.com/watch?v=oAHbLRjF0vo)に関する優れた提案に従った方法です。

ですが、私がそれよりも本当に驚いたのは、降機の速さでした。ドアが開いてから全員が降機するまでの時間は、せいぜい90秒もかからなかったと思います。どうしてそんなことが可能だったのでしょうか?

まず、搭乗や降機は基本的にキューであると理解してください。搭乗や降機では、200名以上の人が1つの小さな隙間(ドア)を通らなければなりません。アルミニウム製の筒の中で座り続けるのはあまり楽しくありませんし、飛行機には行き先があるわけですから、どち

元記事を表示

Progate +α メモず【Ruby on Rails ⑧⑨】

# はじめに
ユーザーログイン・ログアウトとアクセス制限!
難しそう!
記事はいつも通り箇条書き形式です!
気になった見出しがあればお読みください
# メモず
## 表示するエラーメッセージの種類
>1. **フォームのバリデーションエラー**:
> – 使用方法: `.errors.full_message`を使う。
> – 説明: Active Recordモデルのバリデーションに失敗した際、自動的に生成されるエラーメッセージ。これらは通常、フォームのビュー内で、個々のフォームフィールドに近い位置で表示されます。
>2. **サーバーエラー**:
> – 使用方法: インスタンス変数`@error_message`を使うか、エラーハンドリングメカニズムを使う。
> – 説明: 例外が発生した場合、`rescue_from`などを使用して特定のエラーをキャッチし、適切なメッセージをインスタンス変数`@error_message`などに格納してビューで表示します。または、500エラーページをカスタマイズすることもできます。
>3. **権限に関するエラー**:

元記事を表示

Railsチュートリアルで、思ったこと

# とりあえず、チュートリアルの感想

railsの学習というよりも、

1:英語
2:ドキュメント的文書の読解力
3:他文献への勧め
4:テスト
5:セキュリティ
6:エンジニアとしての仕事に必要なtips

の学習に感じた

## 追伸

また、今度、改めて、railsの記事をちゃんと書きます。

元記事を表示

【Ruby on Rails】投稿の更新に失敗したときにエラーメッセージを表示させたい

# 初めに

こんにちは!@taisei_codeです。
Qiitaの投稿頻度を上げていけるように、日頃から直面した問題から背かないように課題解決を意識していきます。

# 問題

今回は、ProgateのSNSアプリをローカル環境で実装していたときにエラーメッセージが表示できないことが課題としてありました。具体的には、投稿の詳細ページで空の投稿で更新して、「Contentを入力してください」のようなエラーメッセージを表示させたいです。

前提、ローカル環境とProgateで扱っているRuby on Railsのバージョンがこちらになります。

Progate : Rails5

ローカル : Rails7

### ソースコード

“`ruby
def update
@post = Post.find_by(id: params[:id])
@post.content = params[:content]
if @post.save
redirect_to(“/posts/index”)
else
render(“posts/

元記事を表示

【初学者向け】Railsにおけるselfの理解:初学者向けイメージガイド

# 初学者向けself.の使い方について

Ruby on Railsを学習して1ヶ月経ったので
1ヶ月前の自分が分からなかった事の一つselfについて
初学者なりにイメージしやすい使い方を伝えようと思います。
出来るだけ専門用語を使わずに書きますが
抜け漏れ誤りがあればご指摘してもらると助かります。

## self.とは
chatgptに専門用語を使わずにselfとは何か質問したら下記の返答がありました。

>「selfは、RubyやRailsで使われる言葉で、
特定のコードの中で __「自分自身」__ を指すキーワードです。
例えば、あるオブジェクトが自分自身のメソッドを呼び出す場合や、
クラス内で自分自身にアクセスする場合に使います。簡単に言えば、
そのコードの中で「私(自分自身)」を指すものと考えれば良いです。」

はい、どうでしょうか?イメージ出来ますか?
selfを学び始めの頃の自分には __「自分自身」__ ってどういう事?ってなってました。
なのでこれから __「自分自身」についてイメージしやすくしていきます。__

※以下の図を理解するにはRailsの基礎MVCに

元記事を表示

Rubyにおけるトランザクションについて調べてみた

トランザクションは、一連の操作を単一の作業単位として扱うことを指します。
Rubyでは、データベースライブラリやORM(Object-Relational Mapping)ツールを使用してトランザクションを扱います。

## トランザクションの基本概念
### トランザクションとは
トランザクションは、一連のデータベース操作が「全てまたは何も」(all-or-nothing)の原則に従って実行します。
これは、**複数の操作を含む処理が完全に成功する** か、あるいは **失敗した場合には何も変更せず元の状態に戻す** かのどちらかです。

### ACID特性
トランザクションはACID特性というものに従っています、詳しくは別の記事を書く予定です。

– 原子性(Atomicity):
トランザクション内の全ての操作は、単一の単位として扱われます。
全て成功するか、一つでも失敗すれば全てがロールバックされます。

– 一貫性(Consistency):
トランザクションはデータベースを一貫した状態から別の一貫した状態へと変更します。
これにより、データの整合性が保たれます。

– 隔

元記事を表示

Rubyにおける「~」記号の使い方(再投稿)

Rubyで「~」記号は、主に否定演算子として、また正規表現のマッチング、特殊なメソッド名の一部として使用されます。

## 1. 否定演算子(Bitwise NOT)
否定演算子としての「~」は、ビット単位の否定を行うために使われます。これは、整数の各ビットを反転させる操作です。

例:
“` ruby
a = 0b0101 # 5の二進数表現
~a # => -6
“`
:::note info
この例では、0b0101の各ビットが反転され、0b1010の補数が計算されます。Rubyでは整数は補数形式で保持されるため、結果は-6になります。
:::

## 2. 正規表現マッチ演算子
「~」は正規表現と文字列のマッチングにも使用されます。この場合、正規表現オブジェクトに対して使用され、マッチした場合はその位置を、マッチしない場合はnilを返します。

例:
“`ruby
“hello” =~ /e/ # => 1
/e/ =~ “hello” # => 1
“`
:::note info
注釈:
最初の例では、「hello」の中で「e」が最初に現れる位

元記事を表示

axios(ajax)でエラー時のレスポンスbodyが取得できなかったので調べてみた

## はじめに
RailsのAPIからデータを取得する際に、axiosを使用してエラーが発生した場合、レスポンスを取得することができずに困った

## 問題点
Railsでエラーが発生した場合、通常はstatusコードとmessageをレスポンスボディとして返すので取得の仕方を変えないといけなかった

### 例えば

“` ruby
if user.save
render json: { status: 200, data: user }
else
render status: :unprocessable_entity, json:{ messages: user.errors.full_messages }
end
“`
この場合、フロントでaxiosを使用してAPIを呼び出すと、エラーが発生した場合、以下のようなエラーが発生する

“` JavaScript
axios
.post(process.env.API_URL + ‘/api/v1/users/signup’)
.then((res) => {
console.log(res)
}

元記事を表示

rails勉強一日目(今まで数えてなかったので)

## なぜこの記事を作っているのか
今まで何回も時間がないと自分にも言い訳をしてやらないでいて、そろそろまともにやらたいと思ったので日記形式で書くことで自分を追い込みたいと思ったからです。

## 何をやるのか
railsを基本的にやろうと思ってます。(progateの課金を半年分しているのでまずはprogateで勉強しようと思います。)

## なぜrailsなのか
rubyが日本人が作った言語というのが僕の中ではかなりでかいです。あとdbを簡単に使えるのがとてもいいと思いました。
昔phpを使っていたのですがdbのSQL文とかがどうしてもよくわからなくてやめてしまったからです。
あとphpやpythonよりも日本語の解説が多いのも理由です。
個人的にわかりやすいのもいいと思いました。
簡単な英語っぽいのでこれなら拒否反応が出ないと思いました(笑)。

## これから
これからはどこまで勉強が終わったのかを毎日投稿しようと思います。
投稿していなかったらコメントで注意してくれると嬉しいです!!

元記事を表示

Trubo を使って複数のパーシャルを更新する

## はじめに
本記事は[猫でもわかるHotwire入門 Turbo編](https://zenn.dev/shita1112/books/cat-hotwire-turbo)を参考にしています。
勉強中のため、誤りやもっといいやり方があるかも知れません。
その場合は、ご指摘いただけますと幸いです。

また、可能な限りわかりやすく記載するつもりですが、不明瞭な点、追記した方がいい点などがございましたら、合わせてご教授ください。

## この記事の目的
コントローラーで値を更新し、画面に表示されている値だけでなく、フラッシュメッセージなど複数のパーシャルを更新したことがあると思います。
その際、やり方を調べるのに時間がかかったので、備忘録も兼ねて残しておきます。

## パーシャルの記述
更新したい箇所に、タグを挿入します。

“`ruby
# ここに書いてあるコードはリロードされない
h2 hogeページ

= turbo_frame_tag “hoge”, data: { turbo: true } do

# データの更新に伴い、一緒にリロードしたい箇所
“`

`app

元記事を表示

【Ruby on rails】テストについてまとめてみた

# はじめに
こんにちは、エンジニア2年目の嶋田です。
まずは、この記事を開いていただきありがとうございます!
今年も記事の更新をしていきたいと思います。よろしくお願いします。

プログラムの「テスト」って何をするんだ?何からしたら良いんだ?と思っていませんか。
プログラムのテストとは、コードが正しく動くことを確かめる作業のことです。
私自身、最近初めてrailsでテストコードを書いたので今回はその時の学びを含めて記事にまとめたいと思いました!

Rails 7.1.1というバージョンでのテストに焦点を当てて、
(現在の最新バージョンは[7.1.2](https://rubygems.org/gems/rails/versions/7.1.2)です。2023.11.10にリリースされています。)
テストフレームワーク「Capybara」の使い方や、テストでよく使われるメソッド、注意点などを紹介します。

少しでもお役に立てたら嬉しいです!

# 目次
– [テストの基本概念](#テストの基本概念)
– [Railsのテスト環境の設定](#Railsのテスト環境の設定)
– [単体テスト

元記事を表示

Railsの form_with を用いた投稿の作成と編集の処理の流れ② pryでインスタンスの中身も確認。

:::note warn
現在、プログラミングスクールにて、主にRubyやRuby on Railsを勉強している者です。この記事を通して少しでもお役に立てられますと幸いです。また、説明不足や誤りがございましたら申し訳ございません。
:::

この記事は、前回の「Railsの form_with を用いた投稿と編集処理の流れ① pryを使用してインスタンスの中身も確認してみる。」の続きとなります。

https://qiita.com/zakkiiy/items/933dceb2982b4ac8684d

今回は主に、form_withヘルパーを用いた編集処理の流れについてみていきたいと思います。

## 前提
– MVCの流れや一対多の関連付けについての多少の理解。
– Sorcery gemを使用しているため、current_userメソッドを使っています。
– 機能は最低限となっているため、パーシャル(フォーム用)等は使用しておりません。
– ルーティングは resources :posts を使用しており、標準的なRESTfulルートが生成されています。

“`ruby:a

元記事を表示

Progate +α メモず【Ruby on Rails ⑥⑦】

# はじめに
Ruby on Rails学習レッスン⑥は⑤の応用だったので、特に新しい要素はなし。
細かなミスを繰り返しながら学びました。
⑦はユーザー画像の表示!ひそかに楽しみにしてたところ🥳

# メモず
## `$ rails g migration file_name`
マイグレーションファイルのみを作成。
## マイグレーションファイルの書き方
“`rb
class MigrationName < ActiveRecord::Migration[5.0] def change method_name :table_name, :column_name, :data_type end end ``` Ruby on Railsのマイグレーションファイル内の`change`メソッドは、データベーススキーマの変更を定義するために使われます。このメソッド内で行うことができる代表的な操作は以下の通りです。 ### 代表的なメソッド #### テーブルの作成 ```ruby def change create_table :users do |t| t.string

元記事を表示

既存のプロジェクトを Docker 化する手順について (Rails + PostgreSQL)

## **はじめに**

今回は[Rails](https://d.hatena.ne.jp/keyword/Rails)のプロジェクトを Docker 化を紹介します。よろしくお願いします。

## **Docker 化することの意味**

Docker 化することで開発環境を共有でき、さらに Dockerfile を共有することで複数人で共通の環境を構築できます。OS ごとに挙動が変わることがなく、また、コンテナという仮想環境で作業するので自分の PC にあれこれインストールしなくて済みます。

## **Docker 化の手順**

1\. [github](https://d.hatena.ne.jp/keyword/github)から Web アプリの[ソースコード](https://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9)を引っ張ってきます。(今回は[Rails](https://d.hatena.ne.jp/keyword/Rails)アプリ)
2\. Dockerfile、docker-c

元記事を表示

【Docker】アーキテクチャの違いでつまづいたので調べてみた

どうもこんにちは。

今回は、Dockerを使用してRailsの環境構築をしていた時につまづいた、「x86_64」「amd64」「arm64」の違いについて調べてみました。

私が使用しているPCはApple Silicon M2チップのMacBookProです。

# アーキテクチャについて

## x86_64/amd64

この二つのアーキテクチャは、呼び方が異なるだけで同じアーキテクチャを指しているようです。

主にデスクトップやサーバー向けのアプリケーションで使用されています。

## arm64

ARMベースのデバイスやサーバーで使用されるアーキテクチャで、特に省電力性や効率性が求められる環境での使用に適しています。

# Dockerコンテナへの記述

ARMアーキテクチャを採用しているPCの場合、`docker-compose build`を実行した時にアーキテクチャが違いますとエラーが出ることがあります。

その場合、`docker-compose.yml`にplatformを指定することで解決できます。

“`yml
db:
image: mysql:8

元記事を表示

[Docker] Terraformで開発環境のMinIOにバケットを作成する方法

# 概要

`MinIO`というAWS APIと互換性を持つストレージサービスを開発環境で使用しています。
今まで`Shell`を実行してバケットを作成していましたが、この度`Terraform`を使用してバケットを作成するようにしてみました。

# 実装

Docker環境で実装します。

### Dockerfile

ベースイメージに`Debian`を指定し、`MinIO`と`Terraform`をimageにインストールします。

ちなみに`amd64`を指定していますが、M1でも動きました。Intelを考慮する必要のない場合は`linux-amd64 / inux_amd64`の部分を`arm`に変更した方がいいかもしれません。

* `Terraform`のバージョンは現時点での最新にしているので適宜修正してください。
* `Rails`を使用していたらイメージはRubyだったりするのですが、アーキテクチャの部分も適宜変更してください。

“`Dockerfile:Dockerfile_minio
FROM debian:latest

RUN apt-get updat

元記事を表示

Railsのcollectionルーティングについての言語化メモ

Railsガイドを読んでいて、[2.10.2 コレクションルーティングを追加する](https://railsguides.jp/routing.html#:~:text=2.10.2%20%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B)の部分で何をやってるのか可能な限り言語化したメモ
間違ってたら教えてください。

例として挙げられていたルーティング↓
“`routes.rb
resources :photos do
collection do
get ‘search’
end
end
“`

これをターミナルで確認する↓
“`
search_photos GET /photos/search(.:format)

元記事を表示

OTHERカテゴリの最新記事