我想限制数据的大小,如果超过我希望它缩小到极限。有没有简单的方法呢?
我的验证码:
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 ...
答案 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