I am trying to insert a line of data into a table in MySQL 5, the data I
am using is:
StartTime: 20090413 13:41:53.000 TestName:changehistory.pl Pass:20
Fail:0 Total:20
Using this function I strip the data down and am going to insert it
using the ActiveRecord insert function (I''m not using Rails as this is
a
Ruby app) so I am loading the ActiveRecord library and using it
directly.
class AutoHarnesses < ActiveRecord::Base
end
def test_add(line,name)
@machine = name[2]
begin
# Test Results will have data in the line
if line =~ /data/
# Scan the line and pull out the pairs we want
# for eventual sql insert, thank you ruby-forums!
s = line.scan(/(\w+):\s*([\s\d:.]+|\S+)/)
s.shift
# Assign values
s.each { |key,value|
if key == "TestName"
then @testname = value
elsif key == "Pass"
then @passes = value.to_i
elsif key == "Fail"
then @failures = value.to_i
elsif key == "Total"
then @totals = value.to_i
else
LOGGER.warn "Did not find a recognizable test
result."
end
}
agNew = AutoHarnesses.connection.insert("INSERT into
auto_harnesses
(machinename,testname,test_pass,test_fail,
test_total) VALUES
(\"{@machine}\",\"{@testname}\",
\"{@passes}\", \"{@failures}\",
\"{@totals}\")")
end
rescue
# Print out errors
LOGGER.warn $!
end
end
If I run some debugging statements after assinging the values I get:
Test changehistory.pl on testbox20 had 20 passes and 0 fails from a
total of 20. So I know the values are being set properly.
The data looks ok, but the insert returns the following error:
#<ActiveRecord::StatementInvalid: Mysql::Error: Incorrect integer value:
''{@passes}'' for column ''test_pass'' at row 1:
INSERT into
auto_harnesses
(machinename,testname,test_pass,test_fail,
test_total) VALUES
("{@machine}","{@testname}",
"{@passes}", "{@failures}",
"{@totals}")>
I thought converting the Pass, Fail and Total values to_i would be best,
since those database columns are int, but that does not seem to resolve
anything. I thought maybe the double quotes was somehow converting the
integer values to strings again but I got a SQL error instead so I
don''t
think that is it either. Google and a search of the forums has not
shown me anything that is helping me figure out what is going on.
Anyone encountered something similar they can share some insights with?
Thanks.
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Michael Furmaniuk wrote: [...]> I thought maybe the double quotes was somehow converting the > integer values to strings againThat is part of the problem, but not the whole problem. Remove the double quotes.> but I got a SQL error instead so I don''t > think that is it either.Did you read what the SQL error is telling you? ''{@passes}'' is not a legitimate integer, and the DB doesn''t know what to do with it. Ruby is not Perl, and so the "{@passes}" construct in your query string will not do any variable interpolation, but will rather send ''{@passes}'' literally to the DB. If you want variable interpolation in Ruby, you must put a # before the braces. Anyway, why are you building a query string like that? That''s ActiveRecord''s job -- just pass it a hash of attributes. As it stands right now, you''re essentially not using ActiveRecord. Either use it properly or remove it from your app. Best, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Marnen Laibow-Koser wrote:> Anyway, why are you building a query string like that? That''s > ActiveRecord''s job -- just pass it a hash of attributes. As it stands > right now, you''re essentially not using ActiveRecord.I''m still getting used to ActiveRecord outside of Rails and having a hard time coming up with the right hash, for now making my own query seemed the best option since I can understand it. When I can find a good tutorial that describes how to build custom hashes I''ll make the switch. Thanks for the help, I didn''t realize that about the variable interpolation. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Michael Furmaniuk wrote: [...]> I''m still getting used to ActiveRecord outside of Rails and having a > hard time coming up with the right hash,I''ve never used AR outside Rails, but from the information at http://www.juixe.com/techknow/index.php/2009/01/14/activerecord-ruby-on-rails-optional/ it looks like you''d use the same options as in Rails -- you just have to explicitly connect to the DB. Note: it took about 30 seconds of Web searching to find that article. :)> for now making my own query > seemed the best option since I can understand it.If you''re going to use a library, take the time to learn how to *use* it.> When I can find a > good tutorial that describes how to build custom hashes I''ll make the > switch.See above.> > Thanks for the help, I didn''t realize that about the variable > interpolation.You''re welcome! Perhaps you should read through the pickaxe book and make sure you''re not missing other Ruby basics. Best, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---