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

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

kaminariのインストール 今回はページネーションをkaminari gemを使って実装する Gemfileに gem 'kaminari' を追記してbundle install —path vendor/bundle 今回の場合掲示板一覧画面とブックマーク一覧に1ページあたり20件の掲示板を表示するようにする …

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

コメント作成、削除処理のajax ・コメントの投稿フォームを処理をajax化するので、form_withをremote: trueにして、サーバーのログでjs形式で送信されているか確認 ちなみに、form_withはデフォルトでremote: trueなので明示的に記載しなくても良い #comment…

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

ajaxとは 非同期通信と呼ばれる通信方法、通常、クライアントがリクエストを出したらサーバーからのレスポンスが返ってくるまで他の作業をすることができない同期通信と呼ばれる方法が用いられているが、クライアントからサーバーに対して、一部の情報だけを…

ブックマーク機能の追加

アソシエーション ユーザーは複数の掲示板をブックマークでき、掲示板は複数のユーザーにブックマークされるというようにモデル間で多対多の関係がある時、中間テーブル(今回の場合はブックマーク)を作成してモデル間の情報をやり取りする このテーブルによ…

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

掲示板編集ページの作成 フォーム部分はパーシャルを用意して、新規作成ページと共有できるようにしておく ので、今回編集ページのビューは以下のようになる #boards/edit.html.erb <div class="container"> <div class="row"> <div class="col-lg-8 offset-lg-2"> <h1><%= t('.title') %></h1> <%= render 'form', { board: @board } %> #掲示板</div></div></div>…

動的なタイトルの実装

例えば今回トップページのタイトルを「 RUNTEQ BORAD APP 」 ユーザーログインタイトルを「 ログイン | RUNTEQ BORAD APP 」 とする。このようにタイトルの一部分だけ変更して表示する機能は application_helper.rbに 以下のモジュールメソッドを用いて作成…

コメントのフォーム作成

前回のようにcommentリソースがboardsリソースにネストされている ルーティングの場合、コメント作成はfomr_wtihにboardモデルとcommentモデルと複数モデルを渡すことでフォームデータの送信先を指定できる 今回は、掲示板詳細画面にコメントのフォームをパ…

コメント機能の実装

掲示板にユーザーがコメントできるようにする Commentモデルの作成及びアソシエーションの確認 コメントは掲示板に属して、ユーザーに属するので、 bundle exec rails g model Comment body:text user:references board:references を実行、Userモデルは複数…

carrierwaveを使った画像アップロード

CarrierWaveとは railsアプリに簡単に画像をアップロードできるライブラリ 使い方 Gemfileに以下を記述して、bundle install gem 'carrierwave', '~> 2.0' その後、以下を実行することで、アップローダーファイルが生成される 今回はファイル名をBoard_image…

rails db:migrate:resetとrails db:resetの違い

rails db:migrate:reset databaseを削除してもう一度作成して、db:migrateを実行している rails db:reset databeseを削除して、現在のschema.erbをロードして、dbを作成している つまりdatabaseをdb/migrate/以下のファイルを全て実行しているか、db/schema.…

railsのTimezone設定

タイムゾーンとは 共通の時間を使うエリアのこと、日本だと使われる時間はJST、世界の基準時刻のUTC(協定世界時)と比較して、+9時間の時差があるため、UTC+09:00やUTC+9などで表記される 設定方法 railsのタイムゾーンはconfig/application.rbで設定できる…

N+1問題の対策

N+1問題とは? データベースからデータを取り出す際に、大量のSQLが発行されて、動作が重くなる現象 具体的な内容 ユーザー(users)が掲示板(boards)を投稿できるサービスがあって、掲示板一覧を表示したい場合、コントローラではallメソッドを使い、boardsテ…

Fakerでダミーデータの作成

seeds.rbとは 初期データを生成してくれるファイル、サンプルデータを入れる必要がある場合などに使われる Fakerとは ダミーデータを生成してくれるgem 公式で様々なデータを用意してくれている 使い方 Gemfileに以下を追記してbundle install gem 'faker' …

renderメソッドの用途

指定したビューを呼び出し コントローラから別のコントローラの配下にあるテンプレートを使用する場合 render 'ファイル名' この記述の場合ファイル名の部分にusers/newのように「 / 」が含まれるとこのビューは別のコントローラの配下にあるとrailsが認識し…

1対多のアソシエーション

例えばユーザーは複数の掲示板を所有して、掲示板は1人のユーザーに属するようなモデル間で1対多の関連付けを作成したい場合、 ユーザーのモデルをUser、掲示板のモデルをBoard、カラムはtilteをstring型、body(内容)をtext型をすると、 rails g model Board…

デコレーターの導入

decoratorとは デザインパターンの1つ、Decoratorパターンと言うものが存在し、 これは、既存のクラス(オブジェクト)にラップすることで、機能を付け加えたい場合や、 既存の機能に少しだけ修飾を加えたい場合に使われるパターン Draperとは? railsでモ…

フラッシュメッセージのレイアウト

flashとは ページ遷移したときに簡単なメッセージを一時的に表示させる機能 使い方 flashはハッシュのように記述する flash[:キー名] = "メッセージ" キーにはデフォルトではnoticeとalertが用意されている ここでbootstrapによってsuccess,danger,warning,i…

i18nを使った日本語化

・i18nって? ある言語を他の言語に翻訳してくれる機能 国際化(Internationalization)の略称 ・デフォルトに日本語を設定するまでの手順 ・rails-i18n gemのインストール Gemfileに gem 'rails-i18n', '~> 5.1' # For 5.0.x, 5.1.x and 5.2.x を記述してbund…

sorceryを使ったユーザー機能の作成(ログイン編 )

ログインの実装のためにまず rails g controller UserSessinos new create destroy でUserSessionsコントローラを作成して、ログイン画面を表示するためのnew、ログイン機構の実装を担うcreate、ロウアウト機能の実装を担うdestroyアクションを生成するそし…

sorceryを使ったユーザー機能の作成(登録機能編)

・そもそもsorceryとは? ユーザ認証機能を簡単に実装できるライブラリ、MITライセンスのオープンソースソフトウェアとして公開されている パスワード認証機能の他にも、 ・Remember Me ・Reset Password etc... などの色々な機能が揃っていて選んで使うこと…

font-awesomeの導入

・font-awesomeの5系のバージョンを使いたい場合はfont-awesome-sass、今回は5系を使うため、Gemfileにfont-awesome-sass gemを追加してbundle install gem 'font-awesome-sass', '~> 5.15.1' font-awesomeのスタイルを使えるようにするためにapp/assets/s…

rails bootstrapの導入

・Gemfileにbootstrap gemを追加今回は4系のバージョンを指定してbundle install gem 'bootstrap', '~> 4.3.1' bootstrapのレイアウトを適用するためにapp/assets/stylesheets/application.scssに @import "bootstrap"; を記述 ※この時、新しいRailsアプリを…

アセットパイプラインについて

・アセットパイプラインとは? JavaScriptやCSSのアセットを最小化(スペースや改行などを詰めるなど)または圧縮して連結するためのフレームワーク ・アセットパイプラインの実装は? sprockets-rails gemによって実装され、デフォルトで有効になっている。…

rails g コマンドで生成されるファイルの設定

・rails generate(g)コマンドで何ができるの? ジェネレータを用いて様々なものを作成することができる ・そもそもジェネレータとは 与えられた条件などに基づいてデータやプログラムコードを自動的に生成するプログラム ・railsで使うジェネラータの設定 ra…

rails-tutorial 9章アウトプット

・remember me機能とは ユーザーのログイン状態をブラウザを閉じた後でも有効にする ・暗号化とハッシュ化の違い 暗号化 → 可逆的 ハッシュ化 → 不可逆的 ・実装の大まかな流れ 記憶トークン用のカラムを用意 → 記憶トークンの文字列をハッシュ化 → ハッシュ…

rails-tutorial 8章アウトプット

・cookie(よくメールアドレスやパスワードを入力してログインするときに cookieに保存しますか?とか出てくるあれって? ブラウザに保存される小さな情報またはその領域 ・sessionって? サーバ側で一時的に保持できる情報またはその領域 ・HTTPの性質 ステ…

rails-tutorial7章アウトプット

・RESTfulとは RESTという設計原則に従うシステムの事を指す形容詞 ・RESTの設計原則とは? ・HTTPリクエストはそのリクエストで必要な情報をすべて持ち、前のリクエストからの状態が保存される必要がない (ステートレス) ・個々の情報(リソース)への操作…

rails-tutorial 6章後編アウトプット

・has_secure_passwordメソッドを呼び出すことでできること ハッシュ化したパスワードを、データベースのpassword_digestという属性に保存できる passwordとpassword_confirmation仮想の属性が使えるようになる autheticateが使えるようになる(引数の文字列…

rails-tutorial6章前編アウトプット

・モデルって主にどんな役割があるの? コントローラから受け取った命令に対して、データベースへアクセスして情報を取得したり、 また新たに情報をデータベースに 書き込んだりする ※だけどデータベースはrailsは全く違うもの、railsが日本人だとすればデー…

rails-tutorial5章アウトプット

・要素にclass属性は何回でも使うことができるが、id属性は一回しか使えない ・alt属性は画像がない時に表示される文字列 link_to image_tagのオプションに使われる ・Bootstrapって何それ美味しいの? railsがウェブサーバー側のプログラミングのフレームワ…