セキュリティ系の勉強・その他開発メモとか雑談. Twitter, ブログカテゴリ一覧
本ブログはあくまでセキュリティに関する情報共有の一環として作成したものであり,公開されているシステム等に許可なく実行するなど、違法な行為を助長するものではありません.

rubyチュートリアル12章 メモ

//

隠しフィールド

form_forを利用したフォーム内に隠しフィールドを設定する。

<%= form_for(@user, url: password_reset_path(params[:id])) do |f| %>
      <%= render 'shared/error_messages' %>

      <%= hidden_field_tag :email, @user.email %>

      <%= f.label :password %>
      <%= f.password_field :password, class: 'form-control' %>

      <%= f.submit "Update password", class: "btn btn-primary" %>
<% end %>

隠しフィールドの定義の仕方で値へのアクセス方法が変わる。hidden_field_tag :email, @user.emailとした場合、params[:email]でアクセスでき、f.hidden_field :email, @user.emailとした場合、params[:user][:email]となる。

時間の比較

checkpoint_at < 2.hours.ago

checkpoint_atはdatetime。< 記号を「〜より早い時刻」と読む。"checkpoint_atが現在時刻より2時間以上前 (早い) の場合"にはtrueとなる。個人的には2時間より先(<)(遠く)にチェックポイントの時間があると読むとしっくりくる。(遠近法で遠いと小さいみたいな)

errors.add

バリデーションに対するエラーを出力する方法として準備されている。 Active Record バリデーション | Rails ガイド
デフォルトでは下のような使い方をするが、チュートリアルでは予め決められた表示形式を利用する形を使った。

user.errors.add(:password, "は以下の文字を含むことができません !@#%*()_-+=")


バリデーション失敗時に上のコードを書いて再描画させることで間違いがあったフォームがハイライトされる。おそらく、name属性値から繫がりを調べてフォームを特定していると思われる。ちなみにform_withを用いて生成したフォームは下のhtmlに変換されて出力されいた。

<%=form_with model: @user, url:password_reset_path(params[:id]), local:true do |f|%>
...
 <%= f.password_field :password, class: "form-control"%>

#変換後
<input class="form-control" type="password" name="user[password]">