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

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

rails ルーティング対応表

### ルーティングの早見表

※ ルーティングの設定についての対応表

– index→ 一覧表 [全タスクを表示する]
– show→ 詳細表示 [特定のidのタスクを表示する]
– new→ 新規画面登録 [新規登録画面を表示する]
– create→ 登録 [登録処理を行う]
– edit→ 編集画面 [編集画面を表示する]
– update→ 更新 [更新処理を行う]
– destroy→ 削除 [削除処理を行う]

“`ruby

class BoardsController < ApplicationController def index #Boardの一覧画面では全ての掲示板情報を一覧で表示したい @boards = Board.all end def new #Boardの新規作成画面ではboardの空のインスタンスをviewに渡したい @board = Board.new end def show #Boardの詳細画面ではURLパラメータから取得したBoardのインスタンスが必要

元記事を表示

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

元記事を表示

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

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

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

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

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

GPT?「はい✨」

私?「エラーでた」

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

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

元記事を表示

undefined method ‘new’ for モデル名:Moduleと出た

プログラミングスクールにて絶賛Railsの学習中の者です。
アプリ作成中にタイトルのようなエラーが起きたので、解決法と共に共有します。
## 起きたこと
ブログ機能実装の演習で、Blogという名前のアプリでBlogというモデルを作ったら、コントローラで以下のようなエラーが出ました。

“`
NomethodError undefined method ‘new’ for Blog:Module
“`
翻訳すると「モジュールとしてBlogが認識されている」となります。

(モジュールとは、クラスメソッドとは違います。複数のクラスでメソッドを共同利用できる便利さがありますが、一方でクラスのようにインスタンスの生成はできません。継承もできません。)

最初コントローラ内のnewアクション名か、周辺のコードが間違っているのかと思い確認してみました。ですがどうみてもその周辺に間違いはなさそう。

## 分析
調べてみると、config/application.rb の記述が確かに`Module Blog`となっていました。

どうやらRailsはアプリ名をそのままモジュール名としてconfi

元記事を表示

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` といったデータベースエンジンと呼ばれるものに、 **「データベースを作るよ」** や

元記事を表示

【Rails7/ActionCable】「ArgumentError – wrong number of arguments (given 1, expected 2)」に対するエラー対処(備忘録)

# 開発環境

– Ruby 3.2.2
– Ruby on Rails 7.0.6
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117662/0c35f0b8-d878-485c-57c2-6468f7d40c17.png)

# エラー内容
ActionCableを用いたチャット機能を実装しようと、以下の実装の手順を書いてくれている記事を参考に進めていたのですが、テキストを送信しても実行されずサーバーログを確認してみると、
**`「ArgumentError – wrong number of arguments (given 1, expected 2)」`**
となっており、直訳すると「2つの引数が渡されるのを期待しているが、1つの引数しか渡されていない」というエラーが発生していました。
そこでエラー箇所を確認してみるも以下のように`ActionCable.server.broadcast`には、`room_channel`と`message: data[‘messa

元記事を表示

注文ステータス 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

元記事を表示

Restful APIとGraphQLの違い

## 簡単に言うと
### Restful API
– `URLを使ってデータを取得したり操作したりする`
– リクエストの種類(GETやPOSTなど)によって、データの取得や追加・更新・削除などが行われます。
– シンプルな構造で理解しやすく、使いやすい特徴があります。

### GraphQL
– `クエリを使ってデータを取得したり操作したりします。`
– GraphQLもWebサーバーとクライアントの間でデータをやり取りする方法の一つです。
– GraphQLでは、クエリ(Query)という特別な形式でデータを要求します。
– クライアントが必要なデータだけをリクエストできるため、必要な情報だけを効率的に取得できます。
– データの取得や更新の方法が自由で、柔軟性が高い特徴があります。

元記事を表示

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

はじめに
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
“`
これで使えるようになります!

元記事を表示

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でそれぞれ入力したい場合があります。
この時、ユーザー登録画面から確認コード入力画面

元記事を表示

Ubuntuでdocker-compose

rails7 Ubuntuを使っています。

Gemfile
“`
gem “rails”, “~> 7.0.6”
“`

Dockerfile
“`
FROM ruby:3.1
# 公式→https://hub.docker.com/_/ruby

# Rails 7ではWebpackerが標準では組み込まれなくなったので、yarnやnodejsのインストールが不要

# ruby3.1のイメージがBundler version 2.3.7で失敗するので、gemのバージョンを追記
ARG RUBYGEMS_VERSION=3.3.20

# RUN:任意のコマンド実行
RUN mkdir /myapp

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

# COPY:コピー元とコピー先を指定
# ローカルのGemfileをコンテナ内の/app/Gemfileに
COPY Gemfile /myapp/Gemfile

COPY Gemfile.lock /myapp/Gemfile.lock

# RubyGemsをアップデート
RUN gem upd

元記事を表示

【Rails】バリデーションをスキップ

# validate: false

– https://railsguides.jp/active_record_validations.html
>saveにvalidate: falseを引数として与えると、saveのバリデーションをスキップすることが可能です。この手法は十分注意して使う必要があります。
save(validate: false)

– こんな時に使用
– データパッチをする必要があるが、バリデーションが走り登録できない
– 仕様上、Modelに定義したバリデーションは変更したくない
“`sample.rb
ActiveRecord::Base.transaction do
# 更新
contract.assign_attributes(contract_kind: MONTHLY, updated_system: SYSTEM_NAME, updated_user: UPDATED_USER)
contract.save!(validate: false)
end
“`

元記事を表示

【Rails】メモ化

– 一度呼び出されてから結果が変わらないものはメモ化してしまう
– 呼び出されるたびにロジックやSQLが実行されるのを防ぐため、実行結果を丸々キャッシュする

“`sample1.rb
def position_chief?
@position_chief ||=
if registration_date.nil?
false
else
position = member.position
position.present? && position.chief?
end
end
“`

“`sample2.rb
def invoice?
@invoice ||= payment_date >= Date.new(2023, 10, 1)
end
“`

`||=`により
– **nil** または**false**であれば、右辺を代入する。
– **nil** または**false**以外であれば、2回目以降の呼び出し時は変数に格納された値を実行する。

:::note
メモ化によって再実行を避けることが

元記事を表示

OTHERカテゴリの最新記事