- 1. ChatGPTでプログラミング学習をする際の大事なこと
- 2. undefined method ‘new’ for モデル名:Moduleと出た
- 3. Rails 基礎
- 4. 【Rails7】Javascriptがリロードしないと動かないとき
- 5. 【Ruby on Rails】マイグレーションの仕組みを理解して「分からない」から抜け出そう?【初心者向け】
- 6. 【Rails7/ActionCable】「ArgumentError – wrong number of arguments (given 1, expected 2)」に対するエラー対処(備忘録)
- 7. 注文ステータス enum日本語での実装
- 8. Restful APIとGraphQLの違い
- 9. 管理者側 注文内容一覧ページ
- 10. letter_opener_webって?
- 11. BigDecimal型のデフォルト四捨五入を変更する方法
- 12. 【Rails7】renderメソッド注意点【エラーハンドリング】
- 13. マイページを編集するときにパスワードなしで編集可能にする
- 14. アクション間で同じインスタンス変数を使い回す方法
- 15. Ubuntuでdocker-compose
- 16. 【Rails】バリデーションをスキップ
- 17. 【Rails】メモ化
- 18. 【Rails】DRYなコード
- 19. Railsにてfind, find_by, whereの違いについて
- 20. ジャンル登録機能実装
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.savecurrent_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コースメンターをしています。今回の記事は、ユーザーマイページ(プロフィールページ)を編集する際にパスワードを入力せずに編集を可能にする方法をお教えします。
## 前提
・Railsバージョン: 5.0以上
・Deviseバージョン: 4.2以上
・ログインページが実装されている
・ユーザーマイページ(プロフィールページ)が実装されていることDeviseでは、アカウントをアップデートする際に、3つのパスワード情報が必要になります。
**password**
**password_confirmation**
**current_password**パスワードを3回も打つ理由としては、**パスワードの誤入力を防止、不正なアクセスを防止**などが挙げられます。ただ、プロフィールを編集するために、パスワードを3つも入力させるのは、マジで面倒です。
なので、パスワードなしで実装する方法をこの記事のゴールとします。
## 1.RegistrationsControllerの作成
“`
ra
アクション間で同じインスタンス変数を使い回す方法
## 本記事の内容
アクション間で同じインスタンスを使いたいことがありました。
今回は、アクション間で同じインスタンス変数を使い回す方法を解説しています。## 要件
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/GemfileCOPY 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
メモ化によって再実行を避けることが
【Rails】DRYなコード
# DRY原則-二重化の過ち
`DRY原則`(**Don’t Repeat Yourself** = 繰り返しを避けること):::note
システム内の二重化を最小限に抑えることを目的としている
::::::note warn
DRY原則を破るということは、同じ知識を2箇所以上に記述すること。
この場合、片方を変更するのであれば、もう片方も変更しなければいけなくなる。
:::開発自体の理解とメンテナンスを容易にする唯一の方法は、DRY原則に従うこと。
「すべての知識はシステム内において単一、かつ明確な、そして信頼できる表現になっていなければならない」:::note
既にあるものを簡単に見つけ出して再利用できるようにし、同じものを何度も作成しないような環境を構築すること
:::# 重複しているクエリを修正する
## 最後の条件だけ違うパターン
“`共通コード.rb
transaction_arel = Transaction.arel_table
credit_arel = Credit.arel_table
shop_arel
Railsにてfind, find_by, whereの違いについて
## はじめに
Railsでモデルの検索に使えるメソッド`find, find_by, where`の使い方や違いについて紹介します。
## 結論
||find|find_by|where|
|————|———|———|————|
|括弧の中に指定するものは?|id(複数可能)|条件|条件
|戻り値|条件に一致するデータ全て|条件に一致する最初の1件だけ|条件に一致するデータ全て
|戻り値の型|モデルのインスタンス (結果が複数の場合は配列)|モデルのインスタンス|`ActiveRecord::Relation`のインスタンス
|検索結果がない場合|例外発生|`nil`を返す|空きの`ActiveRecord::Relation`を返す
## 動作確認
### テストデータ
“`
irb(main):015:0> Word.all
Word Load (4.5ms) SELECT `words`.* FROM `words`
=>
[#
ジャンル登録機能実装
はじめに
bootstrap導入済
namespases使用
devaice導入済
itemモデル genleモデル 作成済
商品登録ページ作成済
________
完成イメージ
ジャンル一覧・ジャンル登録(indexページ)
![スクリーンショット 2023-07-23 13.47.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492906/f4691ccf-e93e-3ec9-e91e-32c068552689.png)
ジャンル更新ページ(edit)
![スクリーンショット 2023-07-23 13.49.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492906/46847e7e-69ab-a644-7453-7046e766c7cf.png)### モデル設定
ジャンルモデル追加
“`
$ rails g model Genre name:string
$ rails db:migra