Ryota400’s blog

エンジニアを目指して書いてます。

whenever による記事数一覧のメール送信

実装したいこと ・wheneverを導入して毎日am9:00に下記の内容を管理者にメールで送信させるメールの件名には「公開済記事の集計結果」と設定 ・管理者のメールアドレスにはadmin@example.comを設定 Mailer作成 記事数一覧メールを送信できるように「送信する…

WEb技術基本

WEB技術とは webの正式名称は World Wide WEB → 世界に広がるクモの巣 → 略してweb web上の文書はハイパーテキストという言語で構成され、ハイパーリンクで繋がる 1つのwebページを、複数のwebページと関連付けることで、全体で大きな情報の集合とすることが…

トップ画像をスライダー形式に変更

ActiveStorageとは Amazon S3、Google Cloud Storage、Microsoft Azure Storageなどの クラウドストレージサービスへのファイルのアップロードや、ファイルをActive Recordオブジェクトにアタッチする機能を提供しています。 development環境とtest環境向け…

埋め込みメディアタイプにTwitterの追加

実装したいこと ・twitterのツイートを埋め込みコンテンツとして選択できるようにする(タイムラインではない) ・twitterが選択され、適切なURLが入力されたら、ツイートが表示されるようにする ・youtubeに関しても、IDではなくURL(https://youtu.be/dZ2dcC4…

アイキャッチの表示サイズ / 位置指定

実装したいこと ・アイキャッチ画像をユーザーの入力した幅に設定したい。 ・アイキャッチ画像をユーザーの選択した位置に設定したい。 アイキャッチとは 投稿ページの記事タイトルの下に表示される画像のこと 画像の表示サイズの設定 カラム追加 rails g mi…

アクション権限の調整

実装したこと ・記事投稿アプリで、管理者や編集者以外は記事のCRUD機能を使用できないようにしたい。 ・権限のないユーザーが該当のページにアクセスしたときは、403エラー画面を表示させる。 実装の流れ ・Punditの導入 ・policyファイルの設定 ・Controll…

検索機能の追加

実装したいこと ・著者、タグ、コンテンツ(記事内容)に関しても検索が行えるようにする ・著者、タグはセレクトボックスによる選択、コンテンツ(記事内容)はフリーワード検索が行えるようにする ・追加する各検索機能では、下書き状態の記事も検索できる…

記事ステータスの追加

実装したこと ・記事を投稿するアプリの編集画面で、記事のステータスを「下書き」「公開」「公開待ち」に分類したい。 ・ステータスと公開日時は編集時に選択可能。ただし、公開日時によって記事のステータスを「公開」「公開待ち」に自動で判定して変更す…

TypeError - no implicit conversion of nil into String

エラー内容 記事投稿アプリの中で、記事の中身(文章)を記入せずに空のままプレビュー画面を見ようとしたらエラーが出ました。 TypeError - no implicit conversion of nil into String エラー内容 nilからStringへの暗黙の変換がない。 string型に変換する…

パンくずリストを追加

パンくずリストとは パンくずリストとは、Webサイトを訪れたユーザが今どこにいるかを視覚的にわかりやすくした誘導表示のことを言います。 基本的にWebページの階層順にリンクがリストアップされており、Webページの上部箇所に表示されているケースが多い。…

slim

slimとは 特徴 ・< >や閉じタグなどを削り、最低限必要なものだけを残した、非常にシンプルなテンプレート言語 ・軽量 といった特徴を持つ、Ruby製のテンプレートエンジンです。 つまり、このslimの記法を用いることによって、HTMLがより簡潔に記述できる。 …

プルリクエスト

プルリクエストとは 分散バージョン管理システム(VCS)の機能の一つで、コードなどを追加・修正した際、本体への反映を他の開発者に依頼する機能。「変更を本人以外がレビューしてから反映させる」という手順を容易に実現することができる。 ・機能追加や改…

モデルスペック

モデルスペックとは モデルスペックとは、モデルに関するロジックのテストを指す。 Rspecではテスト内容を記載したファイル(スペックファイル)をもとにモデルスペックを実行する。 モデルスペックの構造 モデルスペックには次を含める。 ・有効な属性で初…

RSpecのセットアップ

Rspecとは RspecとはRubyやRuby on Railsで作ったクラスやメソッドをテストするためのドメイン特化言語 (DSL)を使ったフレームワーク 特徴 Ruby on Railsのテストサポート モックやスタブ(擬似的なクラス)によるテスト支援 テストデータの作成支援 カバレッ…

管理画面 掲示板/ユーザのCRUD機能の作成

メニューのアクティブ・非アクティブ化 app/helpers/application_helper.rb def active_if(path) path == controller_path ? 'active' : '' end 三項演算子を使って、真のときはactive、偽のときは何も返さない('')ようにします。 controller_pathでコントロ…

管理画面へのログイン機能、管理画面トップページの作成

AdminLTE version3系をインストール yarn add admin-lte@^3.1.0 これでnode_modulesとpackage.jsonとyarn.lockというファイルがインストールされ、node_modules/admin-lteディレクトリにデフォルトテンプレートが記載されているので今回はその中のstarter.ht…

パスワードリセット機能の実装

sourceryのreset_passwordモジュールの導入 $ rails g sorcery:install reset_password --only-submodules class SorceryResetPassword < ActiveRecord::Migration[5.2] def change add_column :users, :reset_password_token, :string, default: nil add_co…

プロフィール編集機能の実装

ルーティングの設定 routes.rb resource :profile, only: %i[show edit update] 今回、プロフィール詳細画面と編集画面へのurlは/profile, /profile/editと 現在ログインしているユーザーの詳細と編集画面だけ表示できればいいので、urlでユーザーのidを参照…

掲示板の検索機能を実装

ransackで検索機能を実装する ransackとは、簡単に検索フォームを作成できるgem Gemfile gem 'ransack' bundle install コントローラーの修正 今回検索フォームを配置する、掲示板一覧(index)とお気に入り一覧(bookmarks)部分を修正していく。 app/controlle…

掲示板のページネーション

kaminariのインストール Gemfile gem 'kaminari' bundle install 以下のコマンドを実行すると config/initializers/kaminari_config.rbとページネーションのデフォルトの設定ファイルを生成する。 $ rails g kaminari:config boardモデルに1ページあたり2…

コメント投稿、削除、編集機能のajax化

コメント投稿、削除処理のajax form_withのlocal: trueを削除して非同期処理にする。 app/views/comments/_form.html.erb <div class="row mb-3"> <div class="col-lg-8 offset-lg-2"> <%= form_with model: comment, url: [board, comment], id: 'new_comment' do |f| %> <%= f.label :body %> <%= f.text_area :body</div></div>…

ブックマークボタンのajax化

Ajaxとは Webブラウザ上で非同期通信を行い、ページ全体の再読み込み無しにページを更新する方法のこと。 クライアントとサーバー間の通信においては、通常、同期通信と呼ばれる方法が用いられ、一瞬画面が白くなった後、画面が切り替わるような通信は、全て…

ブックマーク機能(お気に入り登録)の追加

モデルの作成 rails g model Bookmark user:references board:references referencesを使用することで、モデル間の関連付けであるbelongs_toを自動で追加してくれます。今回はUserモデルとBoardモデルにBookmarkモデルがbelongs_toで紐づいているという状況…

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

ルーティングの設定 resources :boards do resources :comments, only: %i[create], shallow: true end コントローラの設定 app/controllers/boards_controller.rb def edit; end def update if @board.update(board_params) redirect_to @board, success: t…

タイトルを動的に出力

動的タイトル表示とは ここで言うタイトルとはブラウザのタブの所に表示される文字のこと。 content_forメソッドとは content_forメソッドは、Railsにデフォルトで用意されているもので、画面毎に異なる内容を呼び出したい場合に使う。 ヘルパーメソッドを追…

コメント機能

モデルの作成 userとboardに紐ずいたcommentモデルを作成します bundle exec rails generate model comment body:text user:references board:references db/migrate/YYYYMMDDhhmmss_create_comments.rb class CreateComments < ActiveRecord::Migration[5.2…

掲示板の画像アップロード機能

確認ポイント ・gemのインストール gem 'carrierwave' gem 'mini_magick' CarrierWaveとは ファイルのアップロード機能を簡単に追加する事が出来るgem Minimagickとは 画像に対して、画像同士を合成したり、リサイズしたりと編集することができるようになる…

フォーム入力時エラー情報を個別表示

確認ポイント ・エラーメッセージ表示部分をformのテンプレートに記載せず、専用のパーシャルが作られていること。 shared/_error_messages.html.erb <% if object.errors.any? %> <div class="alert alert-danger"> <ul class="mb-0"> <% object.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div>…

掲示板の一覧機能の作成

掲示板の一覧機能の作成の確認ポイント ・Boardモデルのバリデーション validates :title, presence: true, length: { maximum: 数 } validates :body, presence: true, length: { maximum: 数 } ・Userモデル has_many :boards, dependent: :destroy depend…