勉強履歴(と雑記)

プログラミング初心者のメモ書きです

Railsチュートリアル 第7章 メモ書き

○ユーザー登録

ユーザー登録フォーム→ユーザー保存→成功でデータベースに登録

→ブラウザの表示をリダイレクト→登録ユーザーのプロフィールを表示+ウェルカムメッセージ

 

・ミックスイン:

Sassの機能で、CSSルールのグループをパッケージ化することで

複数の要素に適用するようにしたもの。

@mixin box_sizing{}でbox_sizing内のCSSをパッケージ化

@include box_sizing;で他の要素に適用。

 

・Usersリソースのroutes:

Resources  :usersをrouteに追加することで、ユーザーのURLを生成するための

名前付きルートと共に、必要となる全てのアクションが利用可能に。

 

・debug:

デバッグ情報を表示するためのメソッド。似たようなメソッドにbyebug gem内にあるdebuggerがあり、アプリの挙動がおかしい時にトラブルが発生していそうなコードに差し込む。そうするとbye bugプロンプトが開き、システムの状態を調査することができる。

 

・form_with:

ヘルパーメソッドの一つで、ActiveRecordのオブジェクトを取り込み、

そのオブジェクトの属性を使ってフォームを構築する。

<%= form_with(model: @user, local: true) do |f| %>

<%= f.label :name %>        

<%= f.text_field :name %>

<% end %>

↓HTML生成

<label for="user_name">Name</label>

<input id="user_name" name="user[name]" type="text" />

 

・マスアサインメント:

値のハッシュを使ってRubyの変数を初期化するもの。

@user = User.new(params[:user]) 

ユーザーの送信したデータを全てUser.newに渡していることになり、

admin属性(管理者)が1という情報をWebリクエストに紛れ込ませるだけで、

Webサイトの管理者権限を奪い取ることができてしまうため、セキュリティー上危険。

 

・Strong  Parameters:

上に書いた危険を防止する目的で、必須のパラメータと許可されたパラメータを指定

できるようにしたもの。params[:user] の代わりにuser_paramsメソッドを使うのが通例。

params.require(:user).permit(:name, :email, :password, :password_confirmation)

→:user属性を必須とし、名前、メールアドレス、パスワード、パスワード確認の属性を許可

 

・エラーメッセージ:

RailsにはエラーメッセージをUserモデルの検証時に自動生成する。

errors.full_messagesメソッドで表示可能。

ブラウザに表示する場合は、パーシャルをrenderで出力すれば良い。

※複数のビューで使われるパーシャルは専用のディレクトリsharedによく置かれる。

 

・redirect_to 〜:

~のURLにリダイレクトするコード。

 

flash

flash[:success] = "Welcome to the Sample App!"

で引数が渡された時(上の場合は成功時)にWelcome to the Sample App!というメッセージを表示。

ページを変えたり、リロードするとこのメッセージは消えている。

Bootstrap CSSにはflash用にsuccess、info、waring、dangerの4つスタイルが用意されている。

 

SSL

現時点のチュートリアルで作成したユーザー登録フォームでは、名前やアドレスなどの

データがネットワーク越しに流されていく欠陥がある。

その前に暗号化を行うのがTLS(Transport Layer Security)でSSLはその一つ。

有効化にはproduction.rbという本番環境の設定ファイルに config.force_ssl = true

を書き加えるだけでOK(本来はSSL 証明書を購入する必要あり)。

 

・Puma:

多数のリクエストを捌くことに適したRuby/Rackアプリケーション用のサーバー。

HerokuのデフォルトはWEBrickで簡単なセットアップに向く。

サーバーをPumaに変更する場合は、Gemfileにpuma gemを追加することだが、

Rails5.0以降はデフォルトで入っている。