プログラミング学習 備忘録

Railsを学習していく上での技術メモ。学んだことや解決したエラーなどを記録していきます。

2020-01-01から1年間の記事一覧

12/18 本日学んだこと(パンくず、nilガード)

パンくずについて パンくずとは自分がwebサイトのどの場所にいるのかを階層構造で表示したもの。 ユーザビリティの向上やseo対策にもなる。 Railsでは、Gem:gretelを使うことで簡単に実装できる。 参考url 【Rails】gretelを使ってパンくずリストを追加して…

12/17 今日学んだこと(RSpec復習)

本日からは既存のアプリのエラーをRSpecを書きながら修正していきますので、学んだことを記録していこうと思います。 RSpec 権限の扱い 管理者権限を持つユーザーをFactoryBotで作るときは、無闇にadmin属性を持つユーザーが作られないようにtraitを使うと良…

【RSpec】システムスペックを実装してみた②

今回もRSpecのシステムスペックについてです。前回は新規でコードを実装しましたが、今回は既存のコードの修正を行いました。 その過程で学んだことについて記します。 FactoryBotのtraitについて FactoryBotの以下のコードを使って、taskの編集に関するテス…

【RSpec】システムスペックを実装してみた

今回はRSpecのシステムスペックを実装しました。 学んだことを簡単に箇条書き。 学んだ事 beforeについて before do visit edit_task_path(task) end は、 before { visit edit_task_path(task) } と1行で書く事ができる。 select_fieldのテスト select ‘do…

【RSpec】バリデーションテストを実装してみた

掲示板アプリで一通りのことを学んだので、12月からRSpecを学び始めました。 RSpec用のsample_appに、これから色々なテストを実装していきます。 掲示板アプリを作成したときと同様、学んだことやエラーの解決方法を順番に備忘録として残していきます。 バリ…

例外処理とSlack通知の実装

掲示板アプリ制作の締め括りに、例外処理及び500エラーが出た際にSlackに通知が飛ぶようにしました。 実装を通して学んだことを記します。 参考にさせていただいた記事 slack-notifierでrailsからSlackへ簡単にメッセージを送る - Qiita 【Rails】500番エラ…

Admin-LTE3を使用した管理画面の実装③(掲示板/ユーザーのCRUD)

前回に続いて、Admin-LTE3を使った管理画面の実装を進めていきました。 その中で学んだ事をまとめました。 enum_helpを使用したプルダウンのセレクトボックスの実装 セレクトボックスの実装で少し詰まったので、色々な記事を参考にして自分なりに解釈し、わ…

Admin-LTE3を使用した管理画面の実装②(新しい知識と学んだ事)

今回の実装を通して学んだことをまとめていきます ◆Userに権限を付与する 一般ユーザーと管理者ユーザーを分けるために、Usersテーブルに、roleという名前のカラムを作成する。(名前はわかればなんでもおk) データ型はintegerにして、enumオプションを使用…

Admin-LTE3を使用した管理画面の実装①(導入の流れ)

今回は、Admin-LTEというGemを導入して管理画面を実装してみました。 layoutファイルの新規作成や、enumオプション、ネームスペースなど、初めて学ぶ事が多くて全体的に苦戦したのですが、JS、CSSの適用に特に時間がかかってしまったので、導入からJS、CSSの…

Sorceryを使ってパスワードリセット機能を実装してみた②(エラー解決)

実装途中で、ルーティングが原因で引き起こされたエラーに見舞われました。 結果としてはケアレスミスが原因の、そこまで大した内容ではなかったのですが、今まで出会ったことのないタイプのエラーだったので備忘録として記録に残しておきます。 エラー解決 …

Sorceryを使ってパスワードリセット機能を実装してみた①(学んだこと)

今回は、gem:sorceryを使ってパスワードリセット機能を実装してみたので、その過程で学んだことや解決したエラーを2記事に渡ってまとめました。 今回の実装では以下のQiitaの記事を参考にさせていただきました。 【Rails】sorceryのパスワードリセット機能…

Ransackを使って検索機能を実装してみた

Ransackとは、railsで検索機能を実装する時にとても便利なgemである。 Gemなしで検索機能を実装しようとすると非常に手間がかかるので、ぜひ覚えておきたいgemの一つ(らしい) Gemなしで検索機能を実装する方法については、こちらの記事がとてもわかりやす…

Kaminariを使ってページネーション機能を実装してみた

導入 Kaminariは、railsでページネーション機能を実装する際によく使われる定番のgemの一つ。 gem ‘kaminari’をgemfileに記載し、いつものようにbundle installをするだけ。 これにより、以下のようなメソッドが使用可能になる。 User.page(1).limit_value #…

ajaxでのコメント機能実装時のエラー②(UrlGenerationError)

UrlGenerationError 今回の実装において最も苦戦したエラー。 一見簡単そうに見えるエラーなのだが、かなりの曲者だった。 # ActionController::UrlGenerationError: # No route matches {:action=>"show", :controller=>"comments", :id=>nil}, missing req…

ajaxでのコメント機能実装時のエラー①(Can't verify CSRF token authenticity.)

今回は、ajaxを使ったコメント機能の実装時に遭遇した二大エラーについてまとめてみました。 ajaxの復習記事はまた後日に上げます。 Can't verify CSRF token authenticity. Started PATCH "/comments/44" for ::1 at 2020-11-07 16:24:44 +0900 Processing …

掲示板のブックマーク機能を実装してみた②(エラー解決)

大したことではないけど、pry-byebugを使って非常に綺麗にエラーを解決できたので記念に記事にしました。 自分の成長を実感しました。 ブックマーク解除ボタンを押したところ、下のコードでエラー発生。 NoMethodError in BookmarksController#destroy undef…

掲示板のブックマーク機能を実装してみた①(学んだこと)

今回は、掲示板のブックマーク機能を実装してみました。 いつものように、学んだことや、自分の書いたコードと理想的なコードの差などをまとめてみました。 また、binding.pryを使用して綺麗な形でエラーを解決できたので、記念に載せてます。 ブックマーク…

掲示板の編集、削除機能の実装

今回は、掲示板に編集と削除機能を実装してみた。 特に滞りなく実装できたのだが、その際にいくつかまた新たに学んだことがあるのでまとめてみました。 ・掲示板取得の際のコード edit, update,destroyアクションでは、掲示板を取得する段階でバリデーション…

掲示板のコメント機能を実装してみた

今回は、掲示板にコメントをする機能を実装してみた。 railsチュートリアルの総復習といった感じで、色々なエラーにぶち当たるも何とか実装終了。 学んだことを記します。 ・URLをネストさせるためには、routingを下のように記載する resources :boards do r…

掲示板の画像アップロード機能を実装してみた。

今回は、carrierwaveというgemを使用して掲示板のアップロード機能を実装した。 この実装を通して学んだこと、忘れそうなことをまとめてみました。 ・carrierwaveの特徴 carrierwaveは、railsで画像をアップロードする際によく使われるgemの1つである。 大…

掲示板実装③ 関連付けモデルのcreateアクション

実装時の最初のコード def create @board = Board.new(board_params) @board.user_id = current_user.id debugger if @board.save flash[:success] = t('defaults.message.new_board_was_created') redirect_to boards_path . . . private def board_params …

掲示板実装② 学んだこと一覧

今回の実装を通して新たに学んだ知識が色々あった。 その中でも、実装時にエラーが出て詰まってしまったことや、特に印象に残った知識を箇条書きにしてまとめようと思う。 ・belongs_to :userで、UserモデルとBoardモデルを関連付けていれば、 validates :us…

掲示板実装① N+1問題を解決する

掲示板実装時、N+1問題を解決する必要が生じたので、解決方法をまとめました。 boards_controller内の通常のコード def index @boards = Board.all end このような記述でも、indexビューは正常に表示されるが、サーバーログを見てみると何十回にも渡って読み…

国際化ツール i18nを導入してみた

i18nは、railsの中に自動で組み込まれている国際化ツール(翻訳ツール)です。 今回は、ログインフォームと新規登録フォームに導入してみました。 ・初期設定を行う Config/application.rbの中で以下の記述をする。 # デフォルトの言語設定 config.i18n.defa…

Sorceryを使ったログイン機能実装時のエラー②

1、まずマイグレーションから見直す schema.rb ActiveRecord::Schema.define(version: 2020_10_11_033753) do create_table "users", force: :cascade do |t| t.string "email", null: false t.string "crypted_password" t.string "salt" t.datetime "crea…

Sorceryを使ったログイン機能実装時のエラー①

Sorceryを使ったログイン機能の実装を試みたところ、エラーでかなりハマったので備忘録として残そうと思う。 エラー発生時のコード user_sessions/new.html.erb <div class="container"> <div class="row"> <div class=" col-md-10 offset-md-1 col-lg-8 offset-lg-2"> <%= form_with(scope: :session, url: login_path, local: true) do |f| %> <%= f.label :em</div></div></div>…

環境構築時にインストールしたAtomをカスタマイズしてみた

ローカル環境構築時にインストールしたテキストエディタのAtomだが、デフォルトのままではターミナルが別窓になっており切り替えが少し面倒。 そこで、platformio-ide-terminalというモジュールをインストールし両方を一画面に表示できるようにしてみた。 デ…

Macbookにローカル環境を構築してみた

プログラミング学習を始めてから今日でちょうど2ヶ月。今まではCloud9を使って開発を行っていたのだが、Progateの環境構築方法を参考に今日やっと自分のMacbookにローカル環境を構築することができた。その際いくつかエラーを吐いたのでその記録を残してお…