rails 独学して軽くにちゃんまとめつくる

【1週目】rails tutorial 9章を

 

 

9.1 編集

gitでcheckout

→editアクション設定

→ビュー設定

→バリデーション&コントローラー

→テスト

 

 

気づいたこと

railsは新規投稿と編集をどう見分けてるのか?

Railsは、form_for(@user)を使用してフォームを構成すると、@user.new_record?trueのときにはPOSTを、falseのときにはPATCHを使用します。 

 

 

②バリデーションのその後のパターン

成功したときはセーブし、flashでメッセージをつけ、redirect_to。

失敗したときはそのままrender。

  def create
    @user = User.new(user_params)
    if @user.save
      log_in @user
      flash[:success] = "Welcome to the Sample App!"
      redirect_to @user
    else
      render 'new'
    end
  end

 redirect_toとrenderの違いは、

前者は送信先のアクションを経由してビューにいく。アクションではインスタンス変数などの情報がつまってるのでそれを拾っていくイメージ。

後者はアクションを経由せずただビューを表示する。失敗したんだから細かいことはいいからもう一度さっきのページやトップページに戻れ!!という突き放したイメージ。

[Rails] renderとredirect_toの違い - 拝啓、シーシュポス

 

③テストは2種類ある。

「こうしたらエラーでるよなー? => ほら、動かなかった!」

という失敗を前提としたテスト

「こうしたら正しく動くよなー? => ほら、動いた!!」

という成功を前提としたテスト

 

どちらも共通するのが、自分の予想がただしければ Green で、予想がはずれたら Red

 

 

④テストのときでもバリデーションを意識する

 

これは僕がバカだとしかいいようがない。バリデーションが正しく機能するかどうかを確かめるためにテストするのだから、リスト9.8でパスワードが空だからエラーがでるのはあたりまえじゃないか。なのに、その後文章で指摘されるまで気づかなかった。

 

⑤名前とメルアドの編集時はパスワードがいらない。

 

:password の validates で allow_nil というコマンドを入力するので大丈夫らしい。新規登録時のみ has_secure_password が働くので新規登録時は安心。

 

⑥before_actionのテストはアクションごと

らしいです。リスト9.17

 

⑦セキュリティの種類:

ログイン要求、編集対象のユーザーと編集しようとしているユーザーの一致

current _user?をつくる、ユーザーのshowはloginなしでもみせるが、indexはloginいる、削除するためのadmin属性をUsersにつける

⑧便利なgem

ランダムなユーザーを一気に作成してくれるfacker

ページネート機能を付けてくれるwill_pagenateとbootstrap_will_pagenate。ページネートはいい機能だが順番が変えたいなあ。

Rails4でページネーションを実装する | 株式会社ランチェスター

これがよさそうだがSQLで対応できる感じでよかった。

 

⑨パーシャルとビューの変数

パーシャルでは9.3.5のリファクタリングを使うため変数に@をつけない。逆にビューではコントローラーから変数をうけとるためにインスタンス変数@をつける

 

コマンドラインすげえや

ある程度の腕前を持つ攻撃者なら、コマンドラインDELETEリクエストを直接発行するという方法でサイトの全ユーザーを削除してしまうことができるでしょう

 

10curlなどのコマンドラインツールを使用すると、PATCHリクエストをこの形式で送信することができます。

 

コマンドラインってUGIができる前の遺産かとおもってたが、案外すごいことできるんだな。

 

 

 

わからなかったとこ

9.1.4

@user.reload

 

9.21

user(:michel) でmichel の情報を全部取得してるがこの方法は使えなかったんじゃなかったのか?そのためのストロングパラメーターだったと記憶してるが

 

9.3.4

フィクスチャってなんぞ?

サンプルデータのことらしい。

リスト9.43のパスをみたらfixtures/users.ymlとあるが、これはUsersモデルのテストで使うユーザーのデータを保管してる場所。このymlはerbに対応してるのでeachメソッドが使えるといっている。リスト9.39ではほんとにデータベースに作成していて、ここではテストのための一時的なもの。

Rails テスティングガイド | Rails ガイド

 

1230~1327 9.2.3まで。難しかったのと、おなかがすいたのでストップ。((

 

1417~15:06 長い道のりじゃった。結局フォローなんとかがわからなかったが、それ以外は大丈夫