LoginSignup
7
9

More than 5 years have passed since last update.

validates_length_of とブラウザからの入力は改行が\r\nとして送信される件

Last updated at Posted at 2013-10-15

before_validation で入力を整えるのがいいのかな。

class Post < ActiveRecord::Base
  # when Post has body:text

  before_validation :body do
    self.body = body.gsub(/\r\n/, "\n")
  end

  validates_length_of :body, maximum: 100
end

これで "foo\r\nbar" という文字列が送信されても "foo\nbar" になおしてからvalidateするので見た目どおりに動く。

さて、これはテストすべきだろうか。別にこれはRailsの実装がまずいわけではないがハマりどころではある。特にクライアント側でリアルタイムにユーザに残りの入力可能文字数を見せている場合は対応すべきだ。そうでない場合は別の方法で解決するほうがいいこともある(たとえば validates_length_of の custom tokenizer を使う方法など)。わかってしまえば自明なことで常にテストすべきとも思わないが、プロジェクトをgrepして探し出せるほうがいいからモデル1つ分くらいはきっちりテストを書いておくのがよいのかなと思う。

cf. テスト書きすぎ問題

7
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9