アソシエーションを組む時に使う、belongs_to/has_one/has_manyの違いについて。

railsにおいて、アソシエーションを組んでテーブル同士を結びつける時に使うbelongs_to/has_one/has_manyのそれぞれの使い分けについてまとめます。 アプリの概要 メルカリのようなフリマアプリで考えていきます。 まず、userテーブル、itemテーブル、purcha…

Herokuで画像ファイルが壊れて表示されない時の対処方法。

Herokuはデータベースが定期的にリセットされ、画像ファイルが壊れて表示されない。そのため、画像を表示させるためには下記コマンドを用いてデータベースをリセットすることが必要。 heroku run DISABLE_DATABASE_ENVIRONMENT_CHECK=1 rails db:drop db:cre…

railsでサーバーが起動しない場合の原因

rails sでサーバーを起動し、ローカル環境でブラウザの確認をする機会が多くあると思います。その時、 A server is already running とターミナルで出て、ブラウザがずっと読み込み続けて開けない時の原因と対策を記録していきます。 原因 これは一日の作業…

before_actionの使い方とコードの可読性の上げ方

コントローラーのアクションで下記のような選んだ商品と現在ログイン中のユーザーが同じか確認する記述がありました。何度も同じ記述を繰り返さないためにどうすればいいか記録していきます。 app/controllers/items_controller.rb def edit @item = current…

文字列の一部を切り取りたい時の書き方。

任意の文字列の最初の2文字を最後尾に持ってきてその文字を出力するメソッドを作りたい時の書き方。 出力例:left2("Hello") → lloHeleft2("Hi") → Hi def left2(str) puts str[2..-1] + str[0..1] end ①str[2..-1]で(配列の1文字目は0のため)3文字目から…

全角数字について

テストコードで全角数字でないことを確認したい時に困ったのでメモしておきます。 一般的な数字は半角数字で111などと入力します。 一方、全角数字は111ですが、これは数字ではなく文字扱いになります。 よって、全角数字は"111"のように""や''のクォ…

rails db:rollbackでエラーが出てしまい、rollbackできない時の対処方法。

rails db:rollbackができない場合の対処方法をまとめていきます。 マイグレーションファイルの変更方法 rails db:rollbackでstatusがdownにならない時 1、マイグレーションファイルの変更方法 マイグレーションファイルはエディタ上では書きかえられますが…

ユーザー管理機能のバリデーションについて

gyazo.com ユーザー管理機能のバリデーション設計で中々エラーを解決できなかったのでまとめておきます。 1つめのエラー(一意性) User ユーザー新規登録 重複したemailが存在する場合は登録できないこと Failure/Error: expect(@user.errors.full_message…

deviseを使った場合の、form_withを分解して説明してみる。

form_withを何回調べてもよく詰まるので分解して記録しておきます。 deviseでユーザー管理機能(ログイン機能)を作成している時出てくる、 <%= form_with model:@user, url: user_registration_path, class: 'registration-main', local: true do |f| %> fo…

エラーの原因箇所の見つけ方(NoMethodError)

gyazo.com NoMethodErrorの原因が中々わかりづらいので考え方を記録していきます。 まず、NoMethodError in Devise::Registrations#create deviseの新規登録時のcreateアクションのメソッドがない。 undefind method 'day'for"1=>1930,2=>1,3=>2":string day…

rails migration defaultについて

railsでmigrationファイルのdefaultについて調べてもあまり明確なものがなかったため記録しておきます。 def change create_table :users do |t| ## Database authenticatable t.string :email, null: false, default: "" t.string :encrypted_password, nul…

HTTPメソッドのGETとPOSTの違いについて

HTTPメソッドのGETとPOSTの違いがはっきり分からず用途に困ったため、簡潔にまとめます。 GET → 要素を取得するだけの場合に使用する。 例えば、検索情報などをform_withで取得する時など。 POST → 要素を取得してデータベースを介して保存する場合に使用す…

Routing Errorについて

gyazo.com No route matches [GET] "/users" とはHTTP VerbがGETかつパスが"/users"のものがないよ、という意味です。 HTTP VerbはHTTPメソッドのことで全部で8つあります。 GET→URIのデータを取得する。 POST→URIにリソースを追加する。 HEAD→URIのヘッドデ…

エラーが出た箇所を修正したつもりでもエラーが消えない時に見直すこと

エラーが出た時に、エラー検索して何が違うのか理解し、その箇所を訂正したつもりでもエラーが消えないことはないでしょうか? 何度か気づかずエラー解消に苦労したので備忘録として残しておきます。 教材でprojectディレクトリのAに例題、Bに演習で使ったア…