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

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

CSVファイルを検証する

# 背景+まとめ

CSVデータを使って、データ登録・更新を行う機能をRSpecでテストする場合にちょっと工夫が必要だった箇所をメモしてます。
例えば、CSVデータの値で更新されているか?をチェックする場合、更新後のデータの比較にCSVデータ自体を用いることで後の変更が容易な記述にすることができます。

# CSV.table

`CSV.table`が使いやすくて便利だった。

“`:users.csv
code,email,gender,status
“001”,test@example.com,1,1
“002”,test2@example.com,1,2
“`
“`ruby
file_path = “users.csv”
users_csv_table = CSV.table(file_path)

# 配列で出力
users_csv_table.to_a
=> [[:code, :email, :gender, :status], [1, “test@example.com”, 1, 1], [2, “test2@example.com”, 1, 2]]

# hea

元記事を表示

プロを目指す人のためのRuby入門を読んで

# はじめに
今回はRubyの定番参考書、
**プロを目指す人のためのRuby入門(通称チェリー本)** を読了したのでその感想を書かせていただきます。

https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E6%94%B9%E8%A8%822%E7%89%88-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design/dp/4297124378/ref=sr_1_2_sspa?_

元記事を表示

とりあえずrails7.1の環境構築をdockerで行う

# 本ページは
rails + MySQLをコンテナ上で動かせるようにする。railsはweb単体では動かせないので、今回構築するのが最小限の環境になる。
* rails: 7.1.1
* ruby: 3.1.4
* MySQL: 5.7

案件で開発環境を0から作る機会なんてそうそうないと思うので、1回自分のPCでやってみましょう。色々と学びが深いはず。

# ローカル環境
* mac(proの中では最弱)
![スクリーンショット 2023-10-15 1.53.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/948431/0eed060c-fb83-24f7-37ca-4c84581ea498.png)
* docker-compose: v2.22.0-desktop.2
* docker-engine: 24.0.6

dockerさえ入っていれば、linuxでもwindowsでも手順は基本同じ。windowsの場合は適宜コマンドを読み替えて下さい。
# 流れ
1. ディレクトリ、各種設定フ

元記事を表示

Docker で rails のプロジェクトを作成する手順(PostgreSQL)

Docker で rails プロジェクトを作成して起動できるまでの手順です。
WEB で調べると何種類かやり方が出てくるのですが、作成されるプロジェクトのバージョンが意図したものが作れなかったり、手順通りにしてもすんなり起動できなったりとしっくりくるものがありませんでした。

手順通りにしてもすんなり起動できない場合にエラーを理解して自分で対処することもできず困っていました。
そもそも Docker や rails についても初学者であるため、まずは基本的な構築方法を習得し、そこからカスタマイズして理解したいと思ったので基本的な状態でのプロジェクトの起動手順をまとめました。

この手順の目的は rails プロジェクトを新規作成し、その状態で起動確認できるところまでなので、この手順通りに作成したプロジェクトをそのまま使うのではなく、あくまで基礎としてプロジェクトに合わせてカスタマイズするためのものです。

最初からプロジェクトに合わせた設定をして構築できればいいのですが、そもそも起動できる状態のものがなければカスタマイズできないので、その素体として使用します。

### 作成するプロ

元記事を表示

【Rails】カラムにNOT NULL制約を追加する方法

カラムにNOT NULL制約を追加するにはマイグレーションファイルに以下のように記述します。

“`rb

def change
change_column_null :テーブル名, :カラム名, false
end

“`

`users`テーブルの`is_sample`カラムにNOT NULL制約を追加する場合は以下のようになります。

“`rb

def change
change_column_null :users, :is_sample, false
end

“`

元記事を表示

docker-compose環境のrailsをpry-byebugを使ってデバッグする

## はじめに
docker-composeを使ったrails環境のデバッグ方法のメモです。

## 環境
`rails 6.1.7.6`
`ruby 3.0.6`
`pry-byebug 3.10.1`

## 手順
1. `pry-byebug`インストール
1. docker-compose.yml編集
1. binding.pry挿入
1. docker-compose up
1. docker attach

### `pry-byebug`インストール
development環境にインストールします。

“`ruby:Gemfile
group :development do
gem ‘pry-byebug’
end
“`

### docker-compose編集
以下の2行をdocker-compose.ymlに追記します。

“`yml:docker-compose.yml
tty: true
stdin_open: true
“`

編集したらデバッグしたい場所に`binding.pry`を挿入し、`docker-compose up`です。

###

元記事を表示

【Rails】delegateの使い方

# はじめに
Railsで便利な書き方をおしえてもらったので記録に残します。

# やりたいこと
usersテーブルとuser_profilesテーブルが存在
一対一の関係。
`User`クラスからuser_profilesのnameカラムを参照したい場合に
、最初は以下の書き方をしていました。

“`user.rb
class User < ApplicationRecord has_one :user_profile def name user_profile.name end end ``` ```sample.rb # 以下でよびだせる @user = User.new @user.name ``` # 結論 ```user.rb class User < ApplicationRecord has_one :user_profile delegate :name, to: :user_profile end ``` ```sample.rb # 以下でよびだせる @user = User.new @user.name ``` 呼び出

元記事を表示

【Rails】カラムのデフォルト値を変更する

カラムのデフォルト値を変更するにはマイグレーションファイルに以下のように記述します。

“`rb

def change
change_column_default テーブル名, カラム名, from: 元のデフォルト値, to: 変更後のデフォルト値
end

“`

`users`テーブルの`is_sample`カラムのデフォルト値を`false`から`true`に変更する場合は以下のようになります。

“`rb

def change
change_column_default :users, :is_sample, from: false, to: true
end

“`

元記事を表示

【Ruby on rails】boolean型って便利!

# はじめに
プログラミングを勉強して2か月ほどです。
初心者なので間違っているところがあれば、ご指摘いただけると幸いです。

# そもそもboolean型ってなに?
この型は、二つの値しか持たないことが特徴です。boolean型では、値を「真 (true)」または「偽 (false)」で表示します。真は通常1や真の値(true)、偽は通常0や偽の値(false)と表現されます。

boolean型の詳しい内容については、@mmaumtjgj(kamin_k)さんの記事で記載されています。
分かりやすく解説されているので、ぜひ読んでみてください。

https://qiita.com/mmaumtjgj/items/b9b04ea64e30a16569fe

# boolean型を使ってできること
boolean型は上記の通り、「true」か「false」で表します。例えるなら、スイッチの「オン」と「オフ」同じような機能です。
この機能と条件分岐を組み合わせることで、見た目上でもスイッチのようにオンとオフを表すことができます。

それでは、実際にboolean型を使用して実装してい

元記事を表示

【Ruby on rails】戻るボタンの実装

# はじめに
プログラミングを勉強して2か月ほどです。
初心者なので間違っているところがあれば、ご指摘いただけると幸いです。

# 戻るボタンを実装したい
戻るボタンを実装するとなった時にまず思いつくことが、
`<%= link_to 'Back', root_path %>`のようにパスを指定することで実装すると思います。

しかし、このパス指定では、今表示されているページから一つ前のページに戻ることはできません。

こんな時に便利なのが下記の記述です。
`<%= link_to '戻る', 'javascript:history.back()' %>`
ブラウザの履歴を記憶し、前のページに戻ってくれます。

どのページからでも飛べるページがあり、そこに戻るボタンを表示したい場合はこの記述が有効になると思います。

# 終わりに
分かりづらい点が多かったと思いますが、最後まで読んでいただきありがとうございました!!
すごく便利な機能だと思うので、みなさんのアプリでも使ってみてください!

元記事を表示

RailsでCSV出力機能の実装時にハマったポイント

# はじめに
RailsでCSV出力機能は定番化されているが、少しハマったポイントを整理していく

# 実装内容
“`:controller
require ‘csv’

def export
reports = (APIにリクエストしてデータを取得)
generate_csv(reports)
end

private

def generate_csv(reports)
csv_data = CSV.generate(encoding: Encoding::SJIS, row_sep: “\r\n”, force_quotes: true) do |csv|
csv << reports[0].keys reports.each do |report| csv << report.values end end filename = "reports_#{Ti

元記事を表示

【個人開発】身近な人への孝行を投稿するサービスを作りました。

# はじめに
はじめまして、hibi_toshi([@hibi_toshi](https://twitter.com/hibi_toshi))と申します。

WEBエンジニアへの転職を目指して学習しています。
今回はポートフォリオとしてサービスを開発しましたので、それについてアウトプットします。
コンセプトは **「孝行をもっと身近に、手軽に、カジュアルに。」** です。

## 作成したサービス
**サービス名: [Cocoaer](https://web.cocoaer.net/) (Chromeのみ対応しています。)**
![Cocoaer_logo.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2918286/bf70f6bc-e6c3-c662-6982-a497794fcfa2.jpeg)

サービスURL: https://web.cocoaer.net/
GitHub URL: https://github.com/hibi6toshi/cocoaer

# サービスについて
## 開

元記事を表示

【Rails】i18n化する時のymlファイルの構成について

## はじめに

現在、プログラミングスクールRUNTEQで未経験からWebエンジニア転職を目指して学習中のyushiと申します。

Railsについて学ぶ中でi18n対応をするためのymlファイルの構成について腑に落ちない部分があったので詳しく調べてみました。

:::note warn
プログラミング初学者のため、内容に誤りがある可能性がございます。
もし間違いがあればご指摘いただけると幸いです。
:::

まずはざっくりとi18nについて抑えておきたいと思います。

## i18nとは?

アプリケーション内で使われる文字列を抽象化して言語ごとに訳文を定義してあげることで、動作する言語環境に応じてアプリケーション側で自動で翻訳するための仕組みです。

ビューに記載する文字列が特定の言語に依存せずに済むようになり、複数言語での開発や実行環境による差分を用意する手間を減らすことができます。

「internationalization」という単語が語源になっていて、最初の「i」と最後の「n」の間に18文字あることから「i18n」と呼ばれているそうです。

Railsにはデフォルトで

元記事を表示

Rails DeviseのReply-Toを消す

# DeviseのデフォルトだとFromがReply-Toになる
デフォルト設定のままだとReply-ToにFromのアドレスが入ってしまう。
邪魔だなあ。どうにかしたいなあ。そんなあなたへの解です。

![スクリーンショット_2023-09-06_16_39_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/795c839c-4a46-244e-c55f-c12072ab89d0.png)

この状態のinitializerはこちら

“`config/initializers/devise.rb
Devise.setup do |config|
# ==> OmniAuth
# Add a new OmniAuth provider. Check the wiki for more information on setting
# up on your models and hooks.
google = Rails.application.secrets.goog

元記事を表示

【超簡単!】RailsアプリでOGPを動的に変更する方法

# はじめに
こんにちは、プログラミングスクールRUNTEQにて、未経験からエンジニア転職を目指して学習中の[すずゆー](https://twitter.com/suzuyu_0115)と申します。

今回はRailsでのWebアプリ開発において、OGPをページ毎に変化させる方法について説明していきます!
「SNSシェアする時に、投稿やページに応じて画像が変化するようなアプリを作りたい」「でもやり方がわからない…」
そんな方に初心者目線で分かりやすく伝わるように書かせていただきました。

今回は解説にあたって、私の作成したWebアプリをベースに説明させていただきます。

https://meshitelog.com

[GitHubはこっち](https://github.com/suzuyu0115/meshitelog)

また、上記のサービスについて詳しくまとめている記事もございますので、お暇な方は拝見していただけると大変嬉しいです✨

https://qiita.com/suzuyu0115/items/6ca6ce071d0379467459

# OGPとは
###

元記事を表示

コメントを投稿機能の流れと注意点

## はじめに
投稿した内容に対してコメントをつける機能を導入する時のRuby on railsの流れがわかりづらかったので、まとめてみました。
スクール初学生さんも同じところで悩まれる方も多いと思いますので参考にして頂ければなと思います。

## 解決したい内容
投稿内容の詳細ページにコメントをつけるまでの流れを解説

### 前提条件
今回は
投稿したツイートを prototype
投稿に対するコメントを comment
とします。

## 全体の流れ
①まず初めにprototypeコントローラーのshowアクションにて@commentに空のインスタンスを生成

“`ruby
def show
@prototype = Prototype.find(params[:id])
@comment = Comment.new
@comments = @prototype.comments.includes(:prototype)
end
“`
※ @prototypeは詳細画面を表示する情報があらかじめ入っていってshowのviewファイルに渡されるて

元記事を表示

ぼっち演算子について(&.)【self, レシーバについても触れてみる】

## はじめに
現在、プログラミングスクールにて、主にRubyやRuby on Railsを勉強している者です。
Railsのコードの中で、ぼっち演算子を見かけた際に、調べれば調べるほどRubyへの理解が乏しいと感じたため、記事にさせていただきました。

## ぼっち演算子とは
ぼっち演算子(セーフナビゲーション演算子とも呼ばれる)とは、「&.」という記号で表されるRubyの演算子となります。この演算子を使用することで、オブジェクトがnilの場合にメソッド呼び出しを安全にスキップすることができます。
ちなみに、ぼっち演算子はRubyの2.3から実装された機能です。

## 安全にスキップできるとは?
Rubyでは、オブジェクトに紐づいたメソッドを呼び出そうとしたとき、そのオブジェクトがnilだった場合にNoMethodErrorという名前のエラーが発生します。
ぼっち演算子を使用することで、そのオブジェクトがnilだった場合に、紐づいたメソッドを実行することなく、nilを返すことができ、NoMethodError になることを防いでくれます。

### NoMethodErrorの例(

元記事を表示

Railsを使ったファイルアップロード処理方法

### Rails Active Storageの使い方ガイド

Ruby on Railsには、ファイルアップロードを簡単に扱うためのモジュールとして`Active Storage`が提供されています。この記事では、`Active Storage`を使ってファイルアップロード機能をRailsアプリケーションに組み込む方法を解説します。

#### 1. 必要なGemのインストール

まず、`Gemfile`に`active_storage`を追加します。Rails 5.2以降であれば、デフォルトで`active_storage`はGemfileに含まれていますが、それ以前のバージョンや特定の理由で含まれていない場合は以下のように追加します。

“`ruby
gem ‘activestorage’, ‘~> 5.2’
“`

追加したら、以下のコマンドを実行してgemをインストールします。

“`bash
bundle install
“`

#### 2. Active Storageのインストール

次に、以下のコマンドを実行してActive Storageの必要なファイル

元記事を表示

Scaffoldを複数使ってみた

# はじめに
はじめまして。今回初めて記事を書きます。にゃこすと申します。よろしくお願いいたします。
今回のテーマは「Scaffoldを複数使ってみた」です。
Scaffoldはプログラミング学習を始めてかなり序盤に学習したので、現役エンジニアの方が思いつかない発想かもしれないなと思い、記事を書いてみます。
※初学者による記事のため正確性に欠ける場合があります。記事についてお気づきの点がございましたらご指摘いただけますと幸いです。

# scaffoldって?
“アプリケーションの基本的な機能の一覧(index)、詳細(show)、新規作成(new/create)、編集(edit/update)、削除(destroy)するために必要なコントローラ、モデル、ビューをまとめて生成”できる便利なコマンドです。
–引用元 [Railsドキュメント](https://railsdoc.com/page/rails_scaffold)

# なんでScaffoldを複数使おうと思ったの?
Webアプリを作成している際に、タスク管理アプリも掲示板アプリも欲しい!!となった

元記事を表示

【Rails】OGPを設定したのにX(旧Twitter)で反映されない時に試すといいかもしれないこと!

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

“Rails“で実装した“Webアプリ“に“OGP“を設定したのですが、“X(旧Twitter)“でなかなか反映されず、「設定が間違っているのかな?」と、とても試行錯誤しました!
~~気付けば2日ほど溶かしました。笑~~
しかし、**あること**を試すと解決しました!
その際の備忘録になります!

# 環境
:::note
Ruby 3.2.2
Rails 7.0.8
gem meta-tegs を用いてOGP設定済み
:::

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

# 試してもダメだったこと

・“キャッシュ“を削除する
・“OGP“を何度も設定し直す
・[OGP確認ツール](https://rakko.tools/tools/9/)で確認する(こちらできちんと表示されていれば、いずれ反映されると思います!)

# クロール
皆さんは、“クロール“をご存知でしょうか!
“クロール

元記事を表示

OTHERカテゴリの最新記事