Ruby on Rails

READMEを書くのに使ったもの

初めて作ったアプリのREADMEを書きました。その中で調べたものや使ったものをまとめてみます。 一覧 脈絡なくいろいろ書くので。 マークダウン記法 MacのスクショとPicGIF Lightでgif作成 Issueに画像をアップロード マークダウン記法 READMEはマークダウン…

Railsアプリにお問い合わせフォームを追加

Railsアプリにお問い合わせフォームを追加しました。お問い合わせがあると、その内容が自分のところにメールで送られてくるようにしました。 今回はこの記事をかなり参考にさせていただきました。 qiita.com メーラーの作成 RailsにはAction Mailerというも…

active_adminで管理画面を作ってみた

アプリに管理人用画面を追加しました。ユーザーの一覧や投稿の一覧が表示されて、編集したりもできるページです。 思ったよりかなり苦労しました。 管理画面の作り方いろいろ Railsアプリでの管理画面の作り方は主に4種類です。 rails_admin active_admin ad…

AWSについて学習したこと<その3>

ここ数日、UdemyでAWSとネットワークの基礎を学んでいます。 私に1円も入るわけではないので宣伝しても仕方ないのですが、山浦 清透さんのこちらの講座です。とてもわかりやすかったのでこの講座を選んで正解だったと思っています。山浦先生、ありがとうござ…

form_withの:scopeオプション

いつも当たり前のようにお世話になっているform_withなのですが、時々登場する:scopeって何なんだろうとずっと気になりつつもスルーしていたので、ちょっと考えてみました。 form_withの書き方 まずはform_withの書き方。モデルのインスタンスを与える場合と…

Railsアプリでの検索フォームの作り方

投稿を検索する機能の作り方です。 こういうやつですね。 ルーティングを設定 まずはルーティングを設定します。 resourcesの7種類には含まれないアクションを作るので、collectionを使います。config/routes.rbに以下のように記述します。 Rails.applicati…

部分テンプレートの作成とrenderの使い方

ビューファイルを書いていると記述量がどんどん増えてきて、繰り返しの部分も出てくるかと思います。そんな時に役立つ部分テンプレートのお話です。DRYってやつですね。 部分テンプレートとは ビューファイルの中で何度も出てくる同じ記述を切り出して、別の…

link_toにremote: trueをつけて非同期通信

ツイッターのいいねみたいな機能をつけたくて、非同期通信を実装しようとして迷走しました。 初めはカリキュラムに出てきたAction cableを使ったのですが、出来上がってから欠陥に気づきました。ググったら「正解」的なやり方が出てきて、早く調べればよかっ…

RailsアプリにGoogleフォントを導入してみた

アプリ制作に必須というわけでもないのですが、作りたい世界観に合うようにしたかったので、webフォントを導入してみました。 Webフォントとは インターネット経由で読み込んで使うことのできるフォントを、Webフォントと言います。サイトを表示するときにネ…

パラメーターでidを二つ送るのにてこずった話

ルーティングをネストしてパラメーターでidを2つ送りたかったときに、なかなかうまくいかずに困りました。 背景 登場するテーブルは二つです。 postsテーブル reactionsテーブル reactionsとpostsが1対多の関係になっています。 reactionsテーブルにはComm…

Bootstrapを導入してみた話

オリジナルアプリのビューを1から作るのは大変そうだと思っていたら、Bootstrapというものを見つけました。名前は聞いたことがあったのですが、どんなものかは全く知らず。少し調べてみて、とりあえず使ってみようかなと。 Bootstrapとは webページの見た目…

boolean型カラムが他の型と違うところ

テーブルに初めてboolean型のカラムを使ってみたところ、いろいろと今までと違うことがあって戸惑いました。 boolean型カラムの作り方 マイグレーションファイルに記述する、ということは他の型と変わりません。t.stringやt.integerと同じように、t.boolean…

改めてdeviseの使い方をおさらいしてみる

学習のためにいくつかアプリを作ってきましたが、ユーザー管理機能の実装には必ずdeviseを使っています。しかし、毎回なんとなく使っていて、deviseが何をしてくれているのかはあまり意識してこなかったので、少し考えてみることにしました。 gem 'devise'を…

「:on」でバリデーション発動のタイミングを指定する

バリデーションが発動して欲しくないときに発動してしまって困った時の話です。 概要 deviseを使ったユーザー管理機能を実装 ↓ Userモデルにパスワードに関するバリデーションを追加 ↓ マイページでユーザー情報を編集できるように実装したい ↓ current_user…

Railsでデータベースのデータを削除するには

Railsでデータベースのレコードをいったん全て消したい時があると思いますが、やり方は少なくとも3通りあります。どれでもレコードを削除できますが、少しだけ違いがあります。 準備 rails newで新規アプリ作成 ↓ Itemsテーブル作成(カラムはnameとprice)…

seedを使ってデータを自動で生成する

アプリを製作する時に、とりあえずデータベースにデータを保存して挙動を確認したい、ということがあると思います。 ビューできちんと表示されるかな、みたいな。 手動でデータを作成することももちろん可能ですが、seedを使うことで簡単に仮のデータを作成…

Railsアプリのエラーメッセージを日本語化する

Railsアプリのエラーメッセージを日本語にする方法をまとめていきます。 やることはざっくり二つです。 Railsの設定を日本語にする localeファイルに直接記述 設定を日本語にする まずはデフォルトの言語を日本語にするため、config/application.rbに以下の…

環境変数の設定!Railsアプリで使用

環境変数の設定の仕方やRailsアプリでの使い方です。 環境変数とは 簡単に言えばOSに保存しておく変数、ということでいいと思います。環境変数に値を設定すると、シェルが簡単にその値にアクセスすることができます。 環境変数を設定するメリット 秘密鍵やパ…

処理が速すぎてエラー?一時停止はsleepメソッド

フリマアプリ製作の中で一番詰まったところだったのと、原因がなかなかに予想外だったので、記録に残しておこうと思いました。 空のテストコードでMySQLエラー 下のようなテストコードを作成しました。DealShipmentはActiveModel::Modelを使って作成したフォ…

TurbolinksのせいでJSが発火しない問題

アプリ製作中にJavaScriptがうまく発火しなくて、うんうん唸りながら調べたところ、Turbolinksというやつが問題でした。 Turbolinksとは 簡単にいうと、リンクを押した時に読み込みをせずに素早く次のページを表示してくれるツールです。Rails6では標準で導…

ヘルパーメソッドを自作する方法

先日フリマアプリの製作中に、出品者以外に商品の購入ボタンを表示するという機能を実装しました。その時にヘルパーメソッドを自作してみたので、記録しておきます。 準備 今回は、商品の詳細ページに以下のような購入ボタンを表示したいです。 // 出品者以…

ActiveHashのデータをFactoryBotで使う方法

アクティブハッシュのデータをFactoryBotで使うのにてこずったので、記録に残しておこうかと思います。 事の発端 itemモデルの単体テストコードで使うため、以下のようなFactoryBotを記述しました。 categoryはアクティブハッシュで、itemテーブルと紐づいて…

Rubocopにダブルクォーテーションを指摘させない方法

Rubocopは、インデントや改行やスペースなどコードの書き方におかしいところがないかをチェックしてくれる便利なツールです。 課題のアプリ作成中に使っていて、「シングルクォーテーションにしなさい」という注意が100件以上きたので、クォーテーションにつ…

テストで使える!ランダムなデータを作るFakerとGimei

テストコードを書く際に、ユーザーネームやパスワードなどランダムなデータを作りたいときがあると思います。そんな時に便利なFakerとGimeiというgemについて紹介します。 Fakerの使い方 Fakerはランダムなデータを自動で生成してくれるgemです。名前、メー…

Railsでバリデーションを設定する方法

今回はRailsでバリデーションを設定する方法についてまとめます。 バリデーションの目的 バリデーションとは、データをデータベースに保存する際に、データが満たすべき制約を定めておくことです。 例えばユーザー登録をする時に、ユーザー名が空白のまま登…

Railsアプリでユーザー管理できるgem!deviseの使い方

deviseは、Railsで作成したアプリケーションにユーザー管理機能を実装することができるgemです。 今回はdeviseの使い方を簡単にまとめてみました。 deviseのインストール まずはgemfileにdeviseを追加します。 gem 'devise' そして、bundlerでインストールし…

Railsで作成したアプリをHerokuでデプロイする手順

カリキュラムの指示に沿って、Herokuでアプリのデプロイをしたので、記録に残しておこうかと思います。 Herokuでデプロイする大まかな流れ アカウントを作成 ↓ Heroku CLIをインストール ↓ 必要なgemをインストール ↓ masterブランチにcommit ↓ Heroku上に新…

Railsにおける例外処理。例外とエラーは違う?

例外とは?エラーとは違う? 例外とは、ある処理を行った結果が期待したものと違い、異常なものであるような状況のことです。 例外とエラーは違うのか、気になって調べてみましたが、どうやら明確な共通認識はなさそうです。そもそもどういう文脈で使うのか…

FactoryBot使用でエラー。KeyError: Factory not registered:

先日FactoryBotを使用したらエラーが出てしばらく困ったので、その時のことを記録しておこうかと思います。 FactoryBot使用の準備 FactoryBotを使用するための準備をします。 まずはgemfileに必要なgemを記載していきます。 group :development, :test do # …

Railsで画像ファイルをアップロードするにはActive Storage

Active Storageとは railsにおいて、画像などのファイルのアップロード機能を実装するためのgemです。 画像のサイズなどを加工してからアップロードするためには、ImageMagickというツールと、image_processing、mini_magickというgemも必要になります。 Act…