2017-03-24 4 views
2

Railsのタイプtext属性の行数/テキスト行数を制限する方法はありますか? Rails検証で行/テキスト行の数を制限する方法は?

は、私はそうのような文字の数を制限することができることを知っている:

validates :message, :length => { :maximum => 100 } 

しかし、どのように行数は?

ありがとうございました。

+0

行の長さには制限がありますか? – Aegis

+0

まだありません。しかし、それを制限することも良いでしょう。 – Tintin81

+1

答えはどれですか? – Aegis

答えて

3

を読むことができますこれを行うためのカスタム検証を書くことはかなり簡単です。これを行うにはvalidate(ないvalidates)を使用します。

validate :not_too_many_lines 
private 
def not_too_many_lines 
    if self.message.split("\n").length > 10 
    self.errors.add :message, "has too many lines" 
    end 
end 

errorsはそれで何かを持っているかどうかをチェックし、これがvalid?前に実行されるボンネットの下で。無効なレコードを保存しようとした後に<record>.errors.full_messagesを実行した場合、「メッセージの行が多すぎます」と表示されます。あなたが使用できる "あまりにも多くの行"と言うだけの場合self.errors.add :base, "too many lines"

4

カスタムバリデータを作成して、必要なロジックを実装することができます。以下の考え方に沿って何かがトリックを行う必要があり、次のよう

class LinesValidator < ActiveModel::EachValidator 

    def validate_each(record, attribute, value) 
    lines = value.split("\n") 

    if lines.size > options[:maximum] 
     record.errors[attribute] << "too many lines" 
    end 

    if lines.any? { |l| l.size > options[:length]} 
     record.errors[attribute] << "line longer than allowed length" 
    end 
    end 

end 

と使用方法は、次のようになります。検証とカスタムバリデータに関する詳細については

validates :message, lines: { maximum: 5, length: 10} 

を、あなたはrails docs

関連する問題