Ruby on rails - 在验证时缩小条目的长度

时间:2011-11-30 07:29:48

标签: ruby-on-rails validation

我想限制数据的大小,如果超过我希望它缩小到极限。有没有简单的方法呢?

我的验证码:

validates :title, :presence => true, :length => { :maximum => 80 }

例如数据是:

  

Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore

我希望它缩小为:

  

Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod temp ...

2 个答案:

答案 0 :(得分:2)

请参阅ActiveRecord callbacks,您应该在before_validation中执行此操作。您可以使用ActiveSupport提供的String#truncate截断字符串。

示例:

before_validation do
  self.title = title.truncate(80, :omission => '...')
end

答案 1 :(得分:1)

我只是把它放在before_create函数中,因为你并没有真正验证任何东西 - 你只是希望在某些条件下更改数据。此外,您可能需要考虑保留长标题并使short_title之类的函数返回缩小版本 - 这会为您提供相同的功能,并且您最终可能需要更长的标题。

before_create :shrink_title

...

def shrink_title
  self.title = title[0...77] + '...' if title.length > 80
end

def short_title
  (title.length > 80) ? title[0...77] + '...' : title
end