Ruby関連のことを調べてみた2023年07月27日

Ruby関連のことを調べてみた2023年07月27日

Rails7で’rails new’するさいにBootstrapを指定するとエラーが発生してしまう

## 環境

:::note
* **ruby**: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-darwin21]
* **rails**: Rails 7.0.6
* **node**: v15.14.0
* **yarn**: 1.22.19
:::

## 現状

“`console
rails new . -c=bootstrap
“`

最後でこのようなエラーが出る

“`console
yarn run v1.22.19
$ sass ./app/assets/stylesheets/application.bootstrap.scss:./app/assets/builds/application.css –no-source-map –load-path=node_modules
rbenv: sass: command not found

The `sass’ command exists in these Ruby versions:
2.5.1
2.6.3
2.6.4
2.6

元記事を表示

allow_nil: trueとは

# はじめに
Ruby on Railsでは、データモデルのバリデーションを設定することが一般的です。その一部として、`allow_nil: true`というオプションが存在します。この記事では、`allow_nil: true`がどのように動作し、それがどのような状況で役立つのかを詳しく解説します。
### `allow_nil: true`の基本的な動作
`allow_nil: true`オプションは、指定した属性のバリデーションを行う際に使用されます。このオプションが設定されていると、属性の値がnilの場合にはバリデーションがスキップされます。つまり、その属性がnilでもバリデーションエラーにはならないのです。
### 例えば
Userモデルに`reset_password_token`属性属性が存在し、以下のようなバリデーションが設定されているとします。
“`ruby:user.rb
validates :reset_password_token, uniqueness: true, allow_nil: true
“`
いくつかのシナリオを見てみます。
①`reset_p

元記事を表示

【Ruby】お金を最小限の枚数の紙幣・硬貨で支払う式

Rubyを使ったアルゴリズムについて学習しています。

今回は、特定の金額を与えられたときに、どのようにそれを最小の枚数の紙幣と硬貨に分けるかを求めていきます。

# 完成コード

“`ruby
money = 7468
currencies = [10000, 5000, 1000, 500, 100, 50, 10, 5, 1]
result = {}

currencies.each do |currency|
count = money / currency
money %= currency
result[currency] = count
end

puts result
“`

このコードは各紙幣・硬貨で金額を割ってその商(枚数)を得て、それをresultハッシュに保存している。そして、その紙幣・硬貨で金額を割った余りを次の紙幣・硬貨の計算のための金額とする。これを最小の紙幣・硬貨まで繰り返すことで、最小の枚数で金額を分けることができる。

# コードの解説

このコードは、ある金額を最小の紙幣と硬貨の枚数で 表すためのプログラム。
1. 最初に `m

元記事を表示

【Ruby】 コロン:の使い方3選

参考:ちゃんるび!さんのudemy動画がとても分かりやすかったです
https://www.udemy.com/course/ruby-on-rails-c/learn/lecture/24901088#reviews

## シンボル ex) :name, :sbl
– (誤解を恐れずにいうと)Stringの上位互換
– 最初に`:`があったらシンボルと思ってよし
– `不変で重複がない`ため、一意の識別子として頻繁に使用される

## シンボルをキーとしたハッシュ
**定義**
※どちらもまったく同じハッシュが作成される
“`ruby
hash = { :id => 1, :name => ‘saku’ }
hash = { id: 1, name: ‘saku’ } #(省略系)
“`

**参照**
“`ruby
# ‘saku’ を取り出す)
hash[ :name ]
“`

ハッシュは Key の重複を許さないため、同じく重複がないシンボルと相性がよい。
そのためハッシュの Key としてシン

元記事を表示

ChatGPTでプログラミング学習をする際の大事なこと

今回はChatGPTでプログラミング学習をしている初学者、これからしようとしている方に向けて記事を書こうと思います。

先輩方にも、現在の初学者界隈を垣間見てもらえればと思います。
 
私はChatGPT4でPythonを主に学習して2か月が経ちました。
 
2か月の割にはあまり身に付いていないと感じたので、自分への戒めも含まれています。

## 教えは乞うても答えは乞うな

私?「以下の要件を満たすコード頂戴」

GPT?「はい✨」

私?「エラーでた」

GPT?「エラーを見ると…このコードで解決できると思います✨」

ChatGPTめっちゃ優秀なのでまとまったコードもバンバンくれます。
 
エラーが出て理解していなくても、エラーを貼り付ければ正解コードにたどり着けます。
 
私はこの沼にハマっていました。
 
この2か月で、学習中の私がアプリなどを5つほど開発できたのは確かにChatGPTのおかげです。
 
しかしもう一度同じアプリを開発しろと言われると、知識技術を吸収できておらず恐らくほとんど同じくらいの時間がかかると思います。
 
学習の一環としてアプリ開発を主にしてきたもの

元記事を表示

Rails 基礎

## ルーティング

### 名前付きルート
以下のようなルート定義があった場合、名前付きルート **help_path** と **help_url** が自動的に使用できるようになる。
名前付きルートは、ルートのパスやURLが変更されても自動的に更新されるため、リンクを生成する際に非常に便利。
“`ruby:route.rb
Rails.application.routes.draw do
root ‘static_pages#home’
get ‘/help’, to: ‘static_pages#help’
end
“`

“`erb:.erb
# ビューやコントローラー内で名前付きルートを使用する例
<%= link_to 'Help', help_path %>

# フルURLを取得する場合は help_url
<%= link_to 'Help', help_url %>
“`

### 基本的なルートの書き方
“`ruby:route.rb
Rails.application.routes.draw do
# indexアクションとsh

元記事を表示

【Rails7】Javascriptがリロードしないと動かないとき

## 結論から
 data:{turbo: false} を加えてください。

“`ruby:例
<%= link_to "リンク", some_path, data: { turbo: false } %>
<%= form_with model: @model, data: { turbo: false } do |form| %>
“`
 

## 原因
Rails7ではTurbo(以前はHotwireとも呼ばれていました)がデフォルトで有効になっており、これが悪さをしています。

とはいえ、基本はTurboを否定する必要はないので、javascriptが関わる部分だけ上記の記述をしましょう。

## 別の方法
アプリ全体でTurboを無効にする

“`diff_javascript:application.js
– import “@hotwired/turbo-rails”
+ import { Turbo } from “@hotwired/turbo-rails”
+ Turbo.session.drive = false
“`

## ち

元記事を表示

【Ruby on Rails】マイグレーションの仕組みを理解して「分からない」から抜け出そう?【初心者向け】

# ? はじめに
記事を開いていただきありがとうございます!
この記事では主にRailsの初学者に向けて、マイグレーションの仕組みについて分かりやすく解説します!

私が初学の時にやっていた、 **「とりあえず何か分からないけど `rails db:migrate` や `rails db:rollback` を実行してみる」** がみなさんから無くなるように、仕組みを理解できるように、順を追って説明していきます!

:::note info
この記事で書く事
・ よく聞くマイグレーションとはそもそも何か
・ `rails db:migrate` や `rails db:rollback` って何してるの?
:::

:::note alert
この記事で書かない事
・ SQLの解説
・ データベースの構造
・ Railsのコードの書き方
:::

# ? データベースの作り方
まずそもそもデータベース(RDB)はどうやって作るのでしょう?
データベースは `MySQL` や `PostgreSQL` といったデータベースエンジンと呼ばれるものに、 **「データベースを作るよ」** や

元記事を表示

プロを目指す人のための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%EF%BC%BB%E6%94%B9%E8%A8%822%E7%89%88%EF%BC%BD-%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-plus-%E4%BC%8A%E8%97%A4-ebook/dp/B09MPX7SMY/ref=sr_1_1?__mk_ja_JP=%E3%8

元記事を表示

いいコード悪いコードまとめ5章低凝集

# 凝集度とは
凝集度とはモジュール内における、データとロジックの関係性の強さを表す指標。これはクラス、パッケージ、レイヤーなどの場合も同じである。

この凝集度が高ければ変更に強い、望ましい構造と言える。

例えば、以下は低凝集なコードである。
一見、注文クラスの中だから、金額計算や注文管理のメソッドが混ざっていてもよさそうに思えるが、これはよろしくない。

なぜなら、コードが一つの関心事に集中していないため、理解しやすく保守しにくいからだ。このコードでは、金額の計算と注文の管理の両方の機能が混ざっている。

そのため、このコードを理解するには、金額の計算と注文の管理の両方の知識が必要になる。
また、このコードを保守するには、金額の計算と注文の管理の両方のコードを変更する必要もある。

このコードを改善するには、金額の計算と注文の管理の機能を分離すればよい。

例えば、金額の計算はOrderCalculatorクラスに、注文の管理はOrderManagerクラスに移譲することができる。これにより、コードが一つの関心事に集中し、理解しやすく保守しやすくなるわけだ。

“`
class

元記事を表示

注文ステータス enum日本語での実装

:cherry_blossom: **はじめに**
bootstrap導入済 
namespases使用
devaice導入済
ordersモデル 実装済
admin/orders_controller 作成済
注文機能作成済
public/orders_controller.rb 作成済
“`public/orders_controller.rb
def create
@order = Order.new(order_params)
@order.customer_id = current_customer.id
@order.order_status = 0
@order.save

current_customer.cart_items.each do |cart_item|
@order_datail = OrderDatail.new
@order_datail.order_id = @order.id
@order_datail.item_id = cart_item.item_id

元記事を表示

管理者側 注文内容一覧ページ

はじめに
bootstrap導入済 
namespases使用
devaice導入済
costomersモデル、ordersモデル 実装済
注文機能実装済
_____
:star:gimfailにenum導入して日本語で表記されるようにする
“`diff_ruby
gem ‘rails-i18n’
gem ‘enum_help’
“`
“`
$ bundal install
“`
“`scheme.rb
create_table “cart_items”, force: :cascade do |t|
t.integer “customer_id”, null: false
t.integer “item_id”, null: false
t.integer “quantity”, null: false
t.datetime “created_at”, precision: 6, null: false
t.datetime “updated_at”, precision: 6, null: false
t.integer

元記事を表示

letter_opener_webって?

# letter_opener_webってなに??
タイトルの通り`letter_opener_web`について解説したいとおもいます。
#### letter_opener_webとは
開発環境でメールを送信した際に、ブラウザでそのメールを確認するためのツールです。
本番環境で実際にメールを送る代わりに、このツールを使ってメールの内容や送信先を確認することができます。
#### 使用方法
Gemfileにletter_opener_webを追加
“`ruby:Gemfile
gem ‘letter_opener_web’, ‘~> 1.0’
“`
“`
$ bundle install
“`
これで使えるようになります!

元記事を表示

アプリケーションを作成する手順

すでに作りたいアプリケーションのイメージがある場合、下記の3つをざっくりと考え始めること
“`
1. どんなページが必要か
2. どんなページ遷移になるのか
3. そのページにはどんな機能があるのか
“`

作りたいアプリケーションにはどんなページが必要なのか、どんなボタンをどこに置くのかなどを考えることで、曖昧だった機能が見えてきたり、テーブル構造のアイデアが浮かんだりするからです。

また、この作業を「要件定義」とも言います。要件定義を行うことで、どのようなテーブルやカラムが必要なのかも明確になります。

(例)ログイン画面
ログイン画面の機能をざっくりと書き出すと、下記の通り
* 必要項目を入力し、ログインボタンを押すと認証される
* 認証に通ると、ユーザー一覧画面に移動する
* ネットワーク障害や認証失敗などでエラーが起こった場合は、エラーメッセージが表示される
* 「初めての方はこちらをクリック」を押すとページ遷移はせず、サインアップ画面が表示される

元記事を表示

enum

# enumのメリット
* データの整合性と可読性の向上
* データベースのスキーマの柔軟性
これはかなり大きいと思います。例えば、booleanで設定すると、今後の選択肢が増えた場合に変更できなくなってしまいます。しかし、enumで設定しておくと後からのデータベース変更を柔軟に行うことができます。(まあ可能な限り変更しないことが理想ではあるんですが、、、)

# マイグレーションファイルで列挙型を定義
“`
rails g migration AddColumnStatusToUser
invoke active_record
create db/migrate/20230511075254_add_column_status_to_user.rb
“`
“`
class AddStatusToUsers < ActiveRecord::Migration[6.0] def change add_column :users, :status, :integer, default: 0 end end ``` ``` rails db

元記事を表示

BigDecimal型のデフォルト四捨五入を変更する方法

# 書き方
書き方は単純なのですが、調べても全然出てこなかった!!
“`models/Hoge.rb
class Hoge < ApplicationRecord BigDecimal.mode(BigDecimal::ROUND_MODE, BigDecimal::ROUND_DOWN) belongs_to :foobar end ``` https://docs.ruby-lang.org/ja/latest/method/BigDecimal/s/mode.html # 例外処理 計算結果が非数(NaN)やゼロによる除算になったときの処理を定義することができます。 ``` flag = false # デフォルト値 f = BigDecimal::mode(BigDecimal::EXCEPTION_NaN,flag) f = BigDecimal::mode(BigDecimal::EXCEPTION_INFINITY,flag) f = BigDecimal::mode(BigDecimal::EXCEPTION_UNDERFLOW,flag) f = Big

元記事を表示

【Rails7】renderメソッド注意点【エラーハンドリング】

Railsガイド
https://railsguides.jp/v7.0/layouts_and_rendering.html

## 結論から
エラーハンドリングをしたい場合
render :edit, status: :unprocessable_entity
この後半部分が必要です。

※Rails7で仕様が変わっています。
 以前はデフォルトでバリデーションエラーが発生した場合、自動的にこのステータスコードが設定されていました。
 よって:unprocessable_entityを明示的に指定する必要はありませんでした。

## status: :unprocessable_entityとは
HTTPステータスコードの一つで、422 Unprocessable Entityを表します。

このステータスコードは、リクエストがサーバーに到達したが、サーバーがリクエストを理解できない場合に使用されます。

一般的に、クライアントが送信したデータが不正な場合や、バリデーションエラーが発生した場合にこのステータスコードが利用されます。

## 記載しないとどうなるのか
バリデーションエ

元記事を表示

マイページを編集するときにパスワードなしで編集可能にする

## はじめに
初めまして、プログラミングスクールGeekSalonのWebコースメンターをしています。 

今回の記事は、ユーザーマイページ(プロフィールページ)を編集する際にパスワードを入力せずに編集を可能にする方法をお教えします。 

## 前提 
:::note info
・Railsバージョン: 5.0以上
・Deviseバージョン: 4.2以上
・ログインページが実装されている
・ユーザーマイページ(プロフィールページ)が実装されていること 
:::

Deviseでは、アカウントをアップデートする際に、3つのパスワード情報が必要になります。

**password**
**password_confirmation**
**current_password**

パスワードを3回も打つ理由としては、**パスワードの誤入力を防止、不正なアクセスを防止**などが挙げられます。ただ、プロフィールを編集するために、パスワードを3つも入力させるのは、マジで面倒です。 

なので、パスワードなしで実装する方法をこの記事のゴールとします。

## 1.RegistrationsCon

元記事を表示

アクション間で同じインスタンス変数を使い回す方法

## 本記事の内容
アクション間で同じインスタンスを使いたいことがありました。
今回は、アクション間で同じインスタンス変数を使い回す方法を解説しています。

## 要件
1.ユーザー登録画面では、ユーザー名とメールアドレスのみを入力
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985135/e6e21e29-2e65-b582-a161-6ad67ae24eac.png)

2.入力されたメールアドレス宛に確認コードを送信、ユーザーが確認コードを入力する
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985135/a0f7edb8-af25-2681-b832-f51a94625c00.png)

このように、「ユーザー名・メールアドレス・確認コード」の3つを同じFormオブジェクトで管理しているが、別々のviewでそれぞれ入力したい場合があります。
この時、ユーザー登録画面から確認コード入力画面

元記事を表示

いいコード悪いコードまとめ16章設計を妨げる開発プロセスとの戦い

# チームメンバーとのコミュニケーションを密にとっているか
他のチームメンバーと同じ開発をしていた、やっていると思っていたらやっていなかったなどとならないように密にコミュニケーションを取る必要がある。
コンウェイの法則(コンウェイの法則とは、ソフトウェアシステムのアーキテクチャは開発チームの組織とよく似る)という法則から考えてもコミュニケーションは重要
# チームメンバーの心理的安全性は確保されているか
Gogoleが2012年に採用したことが脚光を浴びた概念。これは成功に導くチームを構築する上で重要で、意見や提案をする上で、冷笑されたり、煙たがられたり、聞く耳を持たれない状態ではうまくいかないということ。

# より早く実装完了することに気を取られていないか
# クラス設計と実装のフィードバックサイクルを回しているか
仕様変更の際には最低でもメモ書き程度のクラス図を書くこと。責務や凝集性などの観点から問題ないかをチームでレビューし、なさそうであれば実装に取り掛かる。取り掛かってから見落としに気づくことも多々あるので、それをクラス図にフィードバックすること。

# 厳密に設計しすぎてい

元記事を表示

OTHERカテゴリの最新記事