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のエイリアスというだけらしい。
別のコントローラを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ログイン機能
なども簡単に作れるらしい。へー。
やり方
- Gemfileに
gem 'devise'
を書き込む bundle install
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分