# TypeError: $\_ value need to be String (nil given)

**URL:** <https://www.ruby-forum.com/t/typeerror-value-need-to-be-string-nil-given/111673>\
**Category:** Rails\
**Created:** [August 9, 2007, 6:19pm UTC](https://www.ruby-forum.com/t/typeerror-value-need-to-be-string-nil-given/111673 "2007-08-09T18:19:26Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![jlrc](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/a88e57/32.png) [@jlrc](https://www.ruby-forum.com/u/jlrc)\
**Post date:** [August 9, 2007, 6:19pm UTC](https://www.ruby-forum.com/t/typeerror-value-need-to-be-string-nil-given/111673/1 "2007-08-09T18:19:26Z")

</div>

Hello all,

I am trying to run a unit test in a Rails project of mine (Rails  
1.2.2, Ruby 1.8.4 (2005-12-24) [i486-linux]), and am running into the  
following error:

1. Error:  
test\_pattern\_splits(PatternSplitTest):  
TypeError: $\_ value need to be String (nil given)  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active\_record/  
validations.rb:74:in `split' /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/ validations.rb:74:in`add\_on\_blank’  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active\_record/  
validations.rb:73:in `add_on_blank' /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/ validations.rb:409:in`validates\_presence\_of’  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active\_record/  
validations.rb:822:in `run_validations' /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/ validations.rb:816:in`run\_validations’  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active\_record/  
validations.rb:780:in `valid_without_callbacks?' /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/ callbacks.rb:299:in`valid?’  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active\_record/  
validations.rb:751:in `save_without_transactions' /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active_record/ transactions.rb:129:in`save’  

The model is PatternSplit and the attribute is:  
t.column :split, :smallint, :null =\> false

I assumed this was just a result of a simple bug in my code somewhere,  
but I wasn’t able to find anything obviously wrong. I decided to break  
at  
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/active\_record/  
validations.rb:74  
and debug further, and I came across a very strange condition.

The line causing the problem is:  
value = @base.respond\_to?(attr.to\_s) ? @base.send(attr.to\_s) :  
@base[attr.to\_s]

Debugging session:  
irb(#ActiveRecord::Errors:0xb77739ac):001:0\> @base.respond\_to?  
(attr.to\_s)  
=\> true  
irb(#ActiveRecord::Errors:0xb77739ac):002:0\> @base.send(attr.to\_s)  
TypeError: $\_ value need to be String (nil given)  
from (irb):2:in `split' from (irb):2:in`each’  
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/  
active\_record/validations.rb:75:in `each' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/ active_record/validations.rb:73:in`add\_on\_blank’  
  
irb(#ActiveRecord::Errors:0xb77739ac):003:0\> attr.to\_s  
=\> “split”  
irb(#ActiveRecord::Errors:0xb77739ac):004:0\> @base.send “split”  
TypeError: $\_ value need to be String (nil given)  
from (irb):4:in `split' from (irb):4:in`each’  
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/  
active\_record/validations.rb:75:in `each' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.2/lib/ active_record/validations.rb:73:in`add\_on\_blank’  
  
irb(#ActiveRecord::Errors:0xb77739ac):005:0\> @base.split  
=\> 7  
irb(#ActiveRecord::Errors:0xb77739ac):006:0\> @base.send “split”  
=\> 7

What is going on here?

Thanks in advance,  
jlrc
