10000hの技術メモ

この先生きのこるための勉強内容&時間記録

Ruby on Rails Ⅵ 1章 いいね!機能を作ろう

201703018@home Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]

目次

いいね!機能のテーブルを作ろう

いいね!機能には「どのuser」が「どのnote」にいいねしているのか、という情報が必要。likesテーブルを作って情報を持つ。

# Likeモデルとマイグレーションファイルの作成
rails g model Like user_id:integer note_id:integer

# マイグレーションファイルに従ってlikesテーブルを作成
rake db:migrate

多対多の関係

userとlikeは1対多の関係。これはuserとnoteの関係と一緒。 noteとlikeも1対多の関係。

いいね!機能を追加することで、userとnoteが多対多の関係になる。前の項で作ったlikesテーブルのようなテーブルを「中間テーブル」という。

modelの中でこの関係を表す書き方

  • has_many
  • belongs_to

を再度確認。

参考:Rails4で1対多のリレーションをモデルに実装する - Rails Webook

いいね!機能の準備をしよう

投稿ページに「いいね!」リンクをつける。

likeコントローラを作るために

rails g controller likes

いいね!機能を実装しよう

いいね!リンクが押下されたときにDBに保存する。既にいいね済のときには、いいねリンクでなく「済」と表示。 これも今時のWebサービスなら当然有るべき機能。。

find_byメソッドを使って、テーブルから条件に合うデータを取得する。

変数likeに、current_userとbuildを用いてLikeインスタンスを代入してください

がいまいちわかってない。

find_byはうまいこと使えた。 メソッドの引数に最初はuser_idとnote_idの両方を指定していたけれども、

current_user.likes.find_by~

という書き方をすればuser_idを省略できるらしい。

いいね!を取り消そう

unlikeまわりの実装。

今回の勉強時間:45分 累計勉強時間:14時間7分

Ruby on Rails Ⅴ 3章 ユーザー認証を仕上げよう - buildを使おう, 別のコントローラをrenderしよう

201703016@home Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]

目次

buildを使おう

現状、投稿するときに自分でユーザIDを選択しているが、自動でログインユーザになるようにしたい。

その過程でbuildを使う。

一応調べてみたら、どうも今時のRailsだとnewでもbuildでも違いはなくて、newはbuildのエイリアスというだけらしい。

参考:railsのnewとbuildの違い - Qiita

別のコントローラをrenderしよう

renderはアクションを経由せずにビューを出力するので、ビューで使う変数はrenderの前で定義しておかないといけない。

これで学習コースのⅤも終了。

今回の勉強時間:15分 累計勉強時間:13時間22分

Ruby on Rails Ⅴ 3章 ユーザー認証を仕上げよう - アクションを移動しよう

201703015@home Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]

目次

アクションを移動しよう

トップページにはメインコンテンツが表示されていると良い。

メインコンテンツとは - 新規投稿フォーム - 投稿の一覧

orderメソッドによる並び替え

Note.all.order(created_at: :desc)

作成日時(created_at)を、降順(desc)で。

演習中、

renderメソッドと@notesを用いて、notes/_note.html.erbを呼び出してください

がわからなかった。どうも

<%= render @notes %>

が答えらしいんだけど、

renderって

render 'フォルダ名/パーシャル名'

では無かったの?

と思って調べたら説明を見つけた。

参考:RailsのViewでのrenderメソッドの使い方 - Rails Webook

renderメソッドでは条件が揃えば省略して書けるらしく、ここで渡してる@notesコレクションは、home_controller.rbで全ノートを降順で代入しているもので、そのnote一つずつに対して_note.html.erbのテンプレートを適用して表示している、ということらしい。

納得。

今回の勉強時間:20分 累計勉強時間:13時間7分

Ruby on Rails Ⅴ 3章 ユーザー認証を仕上げよう - コントローラでヘルパーを使おう

201703014@home Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]

目次

コントローラでヘルパーを使おう

Userと同じように、Noteでも自分が作成した投稿だけを編集できるようにする。

UserとNoteの認証は同じ方法なので、ヘルパーを定義してDRYに。

コントローラ内でヘルパーを使えるようにするには、ヘルパーファイルをincludeする。

やりたいことは理解できるものの、まだしっくりきてない感。

今回の勉強時間:15分 累計勉強時間:12時間47分

Ruby on Rails Ⅴ 3章 ユーザー認証を仕上げよう - プロフィールの編集を制限しよう

201703013@home Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]

目次

プロフィールの編集を制限しよう

現状だと他人のプロフィールも編集できてしまうので、自分のプロフィールしか編集できないようにする。

<% if current_user.id == @user.id %>で、条件に合うときだけ「プロフィール編集」リンクが表示されれば良い。

ただし、これだけだと他人の編集ページのURLを直打ちするとアクセスできてしまうので、before_actionを使って、アクション実行前にuser同士を比較する。

今日はつかれたので少なめで。。

今回の勉強時間:10分 累計勉強時間:12時間32分

Ruby on Rails Ⅴ 2章 deviseを活用しよう

201703012@home Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]

目次

ログイン必須ページをつくろう

未ログインユーザがnotesコントローラのnewアクションなどにアクセスしようとしたときに、ログインページにリダイレクトさせる。

コントローラで`before_action :authenticate_user!```すると、そのコントローラの全アクションへのアクセスを、ログイン済ユーザに制限できる。

また、deviseではフラッシュメッセージを自動生成してくれる。

ログイン前後で表示を切り替えよう

ログイン前後でヘッダーの表示を切り替えつつ、deviseで生成されるルーティングを学習しよう。

current_userヘルパー

よく使う。

deviseの処理を見てみよう

パスワードは暗号化されてusersテーブルのencrypted_passwordカラムに保存される。

rails console
> User.last

で「確かに暗号化されてるねぇ」でレッスン終了。

deviseをカスタマイズしよう

deviseのビューをカスタマイズするには、rails g devise:viewsでカスタマイズ用のビューファイルを生成する必要がある。

deviseとコントローラを使いわけよう

このままだとdeviseの新規登録画面と、Ⅳでscaffold使って作った新規登録画面が両方存在していて良くない。deviseの新規登録画面のみ使うよう、不要なアクションを消していく。

resourcesで生成されるルーティングを制限

routes.rbのresourcesの第二引数に「only」を使うと、生成するルーティングを制限することができる。(最初から要らないものは作らない、ということ?)

それはわかったものの、作る時の設計とか大変そう。

今回の勉強時間:40分 累計勉強時間:12時間22分

Ruby on Rails Ⅴ 1章 deviseを準備しよう

201703012@home Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]

目次

インフルで1週間近く寝込んでいたので、久しぶりの勉強ログ。

この章ではユーザのログイン機能を作成する。

deviseをインストールしよう

ログイン機能を簡単に実装できるgemを導入する。それがdevise.

参考:Home · plataformatec/devise Wiki

今回のレッスンでは基本的なログイン機能を作成する。

他にも

  • パスワードリセット機能
  • Twitter / Facebookログイン機能

なども簡単に作れるらしい。へー。

やり方

  1. Gemfileにgem 'devise'を書き込む
  2. bundle install
  3. rails g devise:install

Userモデルにログイン機能をつけよう

ログイン機能はUserモデルを用いて実装。

rails g devise Userコマンドを実行すると、Userモデルでdeviseの機能が使えるようになる。(models/user.rbに自動で変更が加わる)

他にも、上記コマンドで

  • 新規登録画面
  • ログイン画面

が自動生成される。ルーティングも自動生成されるので、ページが表示できる。

コマンドを打ったところ、

~ $ rails g devise User
      invoke  active_record
      create    db/migrate/20170311151727_add_devise_to_users.rb
      insert    app/models/user.rb
       route  devise_for :users

のように、変更点が表示された。

このあとは指示に従って各ファイルを変更。ここは覚えるところというよりは、このあとのための下処理的位置付けなので特別難しいことはなく。

病み上がりなのでここまで。

今回の勉強時間:15分 累計勉強時間:11時間42分