Forum: Ruby on Rails before_save :strip_whitespace => saves with spaces

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Newb N. (Guest)
on 2009-02-07 09:11
i used this private function for removing leading and trailing white
spaces from the values.that below function would be called before_save.
when i print the value after it strips.it prints string without any
spaces.but in the table fields it saves with spaces .
waht would be the problem.pls help me


class CompanyInfo < ActiveRecord::Base
before_save :strip_whitespace

def strip_whitespace
     puts "strip_whitespace"
     @attributes.each do |attr,value|
         puts value
         puts "before strip"
         value = value.strip
         puts "after strip"
         puts value
     end









   end
Frederick C. (Guest)
on 2009-02-07 14:35
(Received via mailing list)
On Feb 7, 7:11 am, Newb N. <removed_email_address@domain.invalid> wrote:
> i used this private function for removing leading and trailing white
> spaces from the values.that below function would be called before_save.
> when i print the value after it strips.it prints string without any
> spaces.but in the table fields it saves with spaces .
> waht would be the problem.pls help me
>

because when you do

value = value.strip

you're not stripping whitespace from value. You are creating a new
string object that has been stripped. The @attributes hash still
contains the unstripped version.

Fred
Newb N. (Guest)
on 2009-02-10 06:19
Thanks for the reply.
Could you tell me the way of implementation pls.
How can i resolve it.


Thanks in advance
rob doan (Guest)
on 2009-03-02 00:49
(Received via mailing list)
Newb N. wrote:
> Thanks for the reply.
> Could you tell me the way of implementation pls.
> How can i resolve it.
>
>
> Thanks in advance
>

change line
  value = value.strip
to:
  self[attr] = value.strip
Todd S. (Guest)
on 2011-08-05 21:22
(Received via mailing list)
I'm updating this older thread based upon my recent experience. This
will not call strip on nils, fixnums, etc.

  before_save :strip_whitespace

  def strip_whitespaces
    @attributes.each do |attr,value|
      self[attr] = value.strip if value.is_a?(String)
    end
  end

On Feb 7 2009, 12:11am, Newb N. <removed_email_address@domain.invalid>
Philip H. (Guest)
on 2011-08-06 03:14
(Received via mailing list)
> I'm updating this older thread based upon my recent experience. This
> will not call strip on nils, fixnums, etc.
>
>  before_save :strip_whitespace
>
>  def strip_whitespaces
>    @attributes.each do |attr,value|
>      self[attr] = value.strip if value.is_a?(String)

Might also try...

      self[attr] = value.strip if value.respond_to?(:strip)

... to pick up things that aren't strings, but are string like.
This topic is locked and can not be replied to.