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

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

【決断くん】※こだわりポイント※ 重みづけを用いた抽選機能を実装

今回実装したいこと 1、「最終確認」画面と「決断結果」画面の間に、「武士の情け」画面を挟む 2、「武士の情け」画面で選ばれた選択肢は、決断くんによって選ばれやすくなる(70%の確率で選ばれるようにする) gyazo.com 実装方法 今回の作戦 1、new→…

RSpecでよく使ったマッチャまとめ

2ヶ月に渡り既存アプリの修正課題をやっていく上で、たくさんのテストを書きました。RSpecは今後の実装でも間違いなく使っていくことになるので、その際に辞書的に使えるように復習も兼ねて簡単にマッチャをまとめました。 ※あくまでも自分用の備忘録なので…

WheneverとActionMailerを両方使って定期通知メールを実装

表題の通り、Wheneverというgemとrailsの機能であるActionMailerを使って1日1回、記事の公開状況がメールで送られるように既存のアプリに修正を加えました。 wheneverとActionMailerについては以前扱ったことがあるので割愛し、解答例と違ったところや学んだ…

ActiveStorage 画像削除機能とカスタムバリデーションについて

今回はRailsのデフォルト機能であるActiveStorageを使って画像を扱う課題だったのですが、非常に難しく途中で断念してしまったので、解答例のコードを読み解いて行こうと思います。 Swiperを使った画像のスライド機能に関してはそこまでややこしくないので今…

YoutubeとTwitterの埋め込み機能の修正と実装

今日は既存のアプリに表題の機能を施しました。 youtubeとtwitterに始まるSNSや動画サービスを閲覧したり、twitterやfacebookを通してログインしたりするのは、もはや今のwebサービスに欠かせないものです。 見出しアイコンを動的にする 元々の自分のコード…

Punditを使った認可機能と403エラーについて

現職の都合でなかなか勉強の時間が取れず、ブログの更新もずっとストップしてしまってました。 色々落ち着いたので、今日からまた心機一転頑張っていきます。 今回はGem:Punditを使った既存の認可機能に修正を加えたので、備忘録として記録を残します。 Pund…

【決断くん】Twitter認証機能&自動投稿機能の実装

現在作っているアプリ、決断くんにtwitter認証機能と自動投稿機能を実装してみました。 理由としては2つあります。 ・決断くんのこだわりポイントの1つ、twitter自動投稿機能を実装するためには、twitter連携が不可欠だから。 ・twitterやFacebookなどのAPI…

【決断くん】 決断回数に上限を設ける & 決断回数を視覚化

一日の決断回数に上限を設け、一定数を超えると警告画面に強制的に飛ばされる機能を実装しました。 また、自分のプロフィール画面で決断回数を閲覧できるようにしました。 タイムゾーンの変更 まずは0時ちょうどに決断回数をリセットできるように設定。 今…

【決断くん】 細部の調整(バリデーションとかアクセス制限とか)

アプリの基本機能が整ったので、いったん新規実装をストップし、バリデーションやアクセス制限などの細部の調整を行いました。 その時に学んだことや、初めて使用したコードなどを記します。 request.refererでURLの直打ちを無効にする 確認画面を通らないと…

【決断くん】確認画面とリザルト画面の実装

今回実装したいこと 1、Sqlを発行せずに、1つ前の選択肢入力画面で入力した情報を遷移先の画面で表示したい。 2、確認画面の抽選ボタンを押した時、2つの選択肢からランダムに1つを選びChoiceテーブルのresultカラムに代入する。 その後、お題、選択肢…

【ポートフォリオ】ズバッと決断くん 初期設定してみた 

昨日から実装を開始したのだが、最初に入れるべきgemを入れてなかったりデータベースをsqlite3から変えてなかったりでガバガバだったので、とりあえず入れてみた。 開発途中でデータベースをmysqlに変更する 参考url 初学者既存アプリのDBをMySQLに変更する…

【ポートフォリオ】ズバッと決断くん ヘッダー、フッター、静的ページを作成

とりあえず、ヘッダーとフッター及び、静的コンテンツを完成させてみました。 一からアプリを立ち上げるのは久々だったので、rails new やrails g controllerをするだけでも抵抗を感じました。 決断くん トップページ semantic UIのデザインは、やっぱりboot…

【ポートフォリオ】ズバッと決断くん

あけましておめでとうございます プログラミングスクール合同ポートフォリオコンテストが迫ってきたので、 最近まで行っていたrailsの既存のコードの修正や、RSpecの勉強をいったん中断してポートフォリオ作成に取り掛かることにしました。 自分で一からサー…

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を使用して綺麗な形でエラーを解決できたので、記念に載せてます。 ブックマーク…