2012-06-11 19 views
11

私は私のデータベース移行ファイルにこれらの文字列/テキストフィールドを持っている:Rails ActiveRecordバリデーション:文字列の最大長?

t.string :author 
    t.string :title 
    t.string :summary 
    t.text :content 
    t.string :link 

そして、これらは私の質問です:

  1. すべての文字列/テキスト属性は、両方の目的のために最大長の検証を持っている必要があり、セキュリティ(数MBのテキスト入力を受けたくない場合)とデータベース(string = varcharの場合、mysqlの文字数は255文字です)。それが正しいのですか、データベースの文字列/テキストのすべての属性に対して最大長の検証をしない理由がありますか?
  2. 著者とタイトルの正確な長さが長いと気にしない場合、文字列として保存するには長すぎないので、それぞれの長さを255に設定する必要がありますか?
  3. URLの最大長が約2000文字の場合、リンクを文字列ではなくテキストとして保存するのは安全ですか? regexpを使用してすでにフォーマットを検証している場合、リンク属性の最大長を検証する必要がありますか?
  4. コンテンツ(テキスト)属性は、制限のない入力からデータベースを保護するために最大長を持つべきですか?たとえば、テキストフィールドの最大長を合理的な100,000文字に設定するか、これは全く無意味で非効率的ですか?

これらの質問は一部の人にとって重要ではないように思えるかもしれませんが、それは入力の検証であり、アプリケーションには必要ですが、ここではむしろ妄想的な価値があると思います。

答えて

5

質問はすばらしく、おそらくrails/mysqlの内部知識が豊富な人はもっともっと展開することができます。

1)モデル内で検証を行うことは、制限を超えた場合にエラーが発生する場所によって異なります。このモデルは、モデルを使用するほとんどのオブジェクトをカバーする可能性が高いため、最適なオプションです。 代わりに、maxlength属性を使用してフォームフィールドを制限するだけです。

オプションフィールドの最初のオプションは機能しません。

2)私は経験則を意識していません。あなたが知っているものが一番長いものを使用し、もう少し大きくしてください。

3)私のルールは、255を超えるものはテキストです。この詳細については、こちらをご覧ください。Here

4)同じ内容の列がある場合は、値がある可能性があります。一部のユースケースでは、コンテンツの種類やユーザーによって最大長が異なる場合があります。

上記のすべては、データ検証の要件がプロジェクトにどの程度厳しいかによっても影響を受けます。

関連する問題