如何限制Rails 3中输入的文本字段中* words *的数量?

时间:2011-05-10 03:32:23

标签: ruby-on-rails

我正在创建一个限制字段中字数而不是字符数的应用。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

使用正则表达式对单词进行计数,然后在验证中使用它:

def word_count(s)
  count = 0
  s.scan(/\b\S+\b/) { count = count + 1}
  count
end 

答案 1 :(得分:1)

拆分默认设置为拆分(白色)空间,以便:

s.split.size

应该为你计算字数。

您是否希望在验证中使用它:

class Widget < ActiveRecord::Base
  validate :word_count_is_less_than_5

private

  def word_count_is_less_than_5
    errors[:widget] << "too many words" if desc.split.size > 4
  end
end

答案 2 :(得分:1)

由于:tokenizer选项,实际上有一种非常简单的方法可以做到这一点。此示例将模型上的摘要字段限制为最多250个字。

validates :summary, :presence => true, :length => { 
  :maximum => 250,
  :tokenizer => lambda { |str| str.scan(/\w+/) },
  :too_long  => "Please limit your summary to %{count} words"
}

在这种情况下,标记生成器将字符串拆分为单词。