validationに`:if` optionを渡すと、viewの`requuired: true`が自動でつかなくなる?
Railsのmodelでpresence validationを書いて、
# model validates :username, presence: true
そのattributeに対応するform
の入力欄をこんな風に書くと
# view - form_for @user = f.text_field :username
だいたいこんなようなHTMLが生成される。
<input id="user_username" name="user[username]" required="required" size="30" type="text" />
validationでpresence: true
と書いておくと、view側で:required
optionを書いてあげなくても、HTML側がrequired="required"
になってくれるようだ。
ただ、validationに:if
optionを渡すとそうはいかないらしい。
# model validates :password, presence: true, if: :password_required? def password_required? ... end
# view - form_for @user = f.text_field : password
<input id="user_ password" name="user[password]" size="30" type="text" />
oh!!
validationに:if
を使うときは、viewにrequired
optionをつけてあげましょう。
# view - form_for @user = f.text_field : password, required: true
ref: http://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method-i-validates
追記 2014-03-20
Railsに詳しい方からコメントを頂ました。
(コメントをするには、はてなへのログインが必要であり、面倒なため、チャットにてコメントを頂きました。こちらに転載させて頂きます。)
validationでpresence: true と書いておくと、view側で:required optionを書いてあげなくても、HTML側がrequired="required"になってくれるようだ。
ご本人が作られたhtml5_validatorsのことです。
https://github.com/rails/rails/pull/3590
誤った情報を記してしまい、大変失礼しました。 貴重なコメントありがとうございました。
- 作者: 高橋征義,松田明,諸橋恭介
- 出版社/メーカー: SBクリエイティブ株式会社
- 発売日: 2013/09/01
- メディア: Kindle版
- この商品を含むブログを見る