Hi there, I?m having difficulties reading the content of some rows in my database. Tried to use some of the code at page 221 in the pickaxe, but didn?t make it work. The SQL query works fine directly against the database. mysql> select id, count, company from users where name = "martin"; +----+-------+------------+ | id | count | company | +----+-------+------------+ | 1 | 0 | | +----+-------+------------+ def count(number) puts "count() reached!\n user is #{@username} " # this works userdata = User.find_by_sql("select id, count, company from users where name = ''@username'' ") account = userdata[0] puts "account-id: #{@account.id}" # empty puts "the name of the company is: #{@account.company}, count # {@account.count}\n" # empty end How do I collect the content of the id, count and company field to variables? I?m very grateful for all help I can get! -- Best regards, Martin Stabenfeldt
Martin Stabenfeldt wrote:> def count(number) > puts "count() reached!\n user is #{@username} " # this works > > userdata = User.find_by_sql("select id, count, company from users > where name = ''@username'' ") > account = userdata[0] > puts "account-id: #{@account.id}" # empty > puts "the name of the company is: #{@account.company}, count > #{@account.count}\n" # empty > > endYour last two puts lines reference @account, but the line before assigns to account. @account will be nil unless assigned already in the current object. Also, the SQL sent to the database will currently contain the literal string "@username" as the name rather than the contents of @username. The best way to pass parameters to the database is with one of the following two techniques: userdata = User.find_by_sql(["select id, count, company from users where name = ?", @username]) userdata = User.find_by_sql(["select id, count, company from users where name = :name", {:name => @username}) -- Philip Ross http://tzinfo.rubyforge.org/ -- DST-aware timezone library for Ruby
Hi, On Apr 11, 2006, at 7:14 PM, Philip Ross wrote:> Martin Stabenfeldt wrote: > >> def count(number) >> puts "count() reached!\n user is #{@username} " # this works >> userdata = User.find_by_sql("select id, count, company from >> users where name = ''@username'' ") >> account = userdata[0] >> puts "account-id: #{@account.id}" # empty >> puts "the name of the company is: #{@account.company}, count # >> {@account.count}\n" # empty >> end > > Your last two puts lines reference @account, but the line before > assigns to account. @account will be nil unless assigned already in > the current object. > > Also, the SQL sent to the database will currently contain the > literal string "@username" as the name rather than the contents of > @username. The best way to pass parameters to the database is with > one of the following two techniques: > > userdata = User.find_by_sql(["select id, count, company from users > where name = ?", @username]) > > userdata = User.find_by_sql(["select id, count, company from users > where name = :name", {:name => @username})Thanks! I tried with this: userdata = User.find_by_sql(["select id, sendt, company from users where name = ?", @username]) @account = userdata[0] puts "id is: #{@account.id}, sendt: #{@account.sendt}}" How should I write it to make puts print the right id and sent values? Thanks again! -- Regards, Martin Stabenfeldt
Hi, On Apr 11, 2006, at 8:57 PM, Martin Stabenfeldt wrote:> On Apr 11, 2006, at 7:14 PM, Philip Ross wrote: >> Martin Stabenfeldt wrote: >> >>> def count(number) >>> puts "count() reached!\n user is #{@username} " # this works >>> userdata = User.find_by_sql("select id, count, company from >>> users where name = ''@username'' ") >>> account = userdata[0] >>> puts "account-id: #{@account.id}" # empty >>> puts "the name of the company is: #{@account.company}, count # >>> {@account.count}\n" # empty >>> end >> >> Your last two puts lines reference @account, but the line before >> assigns to account. @account will be nil unless assigned already >> in the current object. >> >> Also, the SQL sent to the database will currently contain the >> literal string "@username" as the name rather than the contents of >> @username. The best way to pass parameters to the database is with >> one of the following two techniques: >> >> userdata = User.find_by_sql(["select id, count, company from users >> where name = ?", @username]) >> >> userdata = User.find_by_sql(["select id, count, company from users >> where name = :name", {:name => @username}) > > Thanks! > > I tried with this: > > userdata = User.find_by_sql(["select id, sendt, company from > users where name = ?", @username]) > > @account = userdata[0] > puts "id is: #{@account.id}, sendt: #{@account.sendt}}" > > How should I write it to make puts print the right id and sent values?I forgot to mention the most important detail, @account.id and @account.sendt is still empty. :) Sorry for not getting it right in the first email! Regards, Martin
Martin Stabenfeldt wrote:>> I tried with this: >> >> userdata = User.find_by_sql(["select id, sendt, company from users >> where name = ?", @username]) >> >> @account = userdata[0] >> puts "id is: #{@account.id}, sendt: #{@account.sendt}}" >> >> How should I write it to make puts print the right id and sent values? > > I forgot to mention the most important detail, @account.id and > @account.sendt is still empty. :)I''m not sure what the problem is here. There''s an extra close brace at the end of your puts line, but this shouldn''t be causing any problem. Perhaps you could try putting the following line in after running the query to see what is returned: puts userdata.inspect -- Philip Ross http://tzinfo.rubyforge.org/ -- DST-aware timezone library for Ruby
On Tuesday, April 11, 2006, at 6:33 PM, Martin Stabenfeldt wrote:>Hi there, > >I?m having difficulties reading the content of some rows in my database. >Tried to use some of the code at page 221 in the pickaxe, but didn?t >make it work. > >The SQL query works fine directly against the database. > mysql> select id, count, company from users where name = "martin"; >+----+-------+------------+ >| id | count | company | >+----+-------+------------+ >| 1 | 0 | | >+----+-------+------------+ > > > >def count(number) > puts "count() reached!\n user is #{@username} " # this works > > userdata = User.find_by_sql("select id, count, company from users >where name = ''@username'' ") > account = userdata[0] > puts "account-id: #{@account.id}" # empty > puts "the name of the company is: #{@account.company}, count >#{@account.count}\n" # empty > >end > >How do I collect the content of the id, count and company field to >variables? > > >I?m very grateful for all help I can get! > >-- >Best regards, >Martin Stabenfeldt_______________________________________________ >Rails mailing list >Rails@lists.rubyonrails.org >http://lists.rubyonrails.org/mailman/listinfo/railsYou should be able to do something like this: userdata = User.find_by_name(:first, @username) The "by_name" compares @username with your "name" column. All columns are returned. Then you examine columns like: "userdata.company". I think your orginal query will work if you change it slightly. userdata = User.find_by_sql("select id, count, company from users where name = ''#{@username}''". -- Posted with http://DevLists.com. Sign up and save your mailbox.