Ruby on Rails Tutorial 7章
ぼちぼち進めております。
進める中で調べたメモ。
次は7.4から…
Option引数とKeyword引数
演習で違いを調べろというのがあったのでやってみた。
Option引数
オプションとして使う引数(名前の可変長のハッシュ)。
あってもなくても動く。定義していないキーがあっても動く。
そのへん柔軟なので将来の拡張性が高いのが嬉しいところ。らしい。
Rails Tutorialのコードを使った例
ユーザのemailを元にGravatarから画像を引っ張ってきて表示するヘルパー。
gravatar_url
のクエリに、optionsという名前のオプション引数の中のsize
を含めている。
def gravatar_for(user, options = { size: 80 }) gravatar_id = Digest::MD5::hexdigest(user.email.downcase) size = options[:size] gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}" image_tag(gravatar_url, alt: user.name, class: "gravatar") end
呼び出し側は以下のどのパターンでも動いた
- あるパターン
<%= gravatar_for @user , size: 50 %>
- sizeは50
- ないパターン
<%= gravatar_for @user %>
- sizeはdefaultで定義した80
- ない(余計なものがある)パターン
<%= gravatar_for @user , hogehoge: 50 %>
- sizeはdefaultで定義した80
- うごくんやこれ。。
Keyword引数
あってもなくてもいいが、
オプション引数と違って、定義外の引数は渡せない。
ただしググった感じ、引数を渡す順番は自由みたいです。(未検証)
Options引数の場合はハッシュの中から自分で取り出す行が1行挟まってたけど
keyword引数の場合はそれをやらなくてもいい。
def gravatar_for(user, size: 80) gravatar_id = Digest::MD5::hexdigest(user.email.downcase) gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}" image_tag(gravatar_url, alt: user.name, class: "gravatar") end
- ないパターン
<%= gravatar_for @user %>
- sizeはdefaultで定義した80
- あるパターン
<%= gravatar_for @user , size: 50 %>
- sizeは50
- ✗ ない(余計なものがある)パターン
<%= gravatar_for @user , hogehoge: 50 %>
- エラーになった。エラーメッセージは
ActionView::Template::Error (unknown keyword: hogehoge):
ブラウザによるバリデーション(Rails関係ない)
7.3.1 の段階でいい感じのバリデーションのメッセージが出てきた
Userクラスにバリデーションは入れてるけど、
まだこの段階でチェックは走らないと思うし
こんなエラーメッセージ自分で書いてないし気持ち悪かったので正体を調べた
結論:
input type="email"
のフォームはブラウザの方でバリデーションしてくれるみたい。
参考リンク: www.htmq.com
マスアサインメントとストロングパラメータ
- マスアサインメント
- フォームから送信されたデータをノーチェックでDB登録すること
- 脆弱
- Strong Parameters
- 引き渡すパラメータを許可制にする
- 変なパラメータを紛れ込ますことができなくなる
- 実装例:
params.require(:user).permit(:name, :email, :password, :password_confirmation)