Forum: Ruby on Rails Reading MySQL rows

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.
Martin S. (Guest)
on 2006-04-11 20:36
(Received via mailing list)
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 S._______________________________________________
Rails mailing list
removed_email_address@domain.invalid
http://lists.rubyonrails.org/mailman/listinfo/rails
Philip R. (Guest)
on 2006-04-11 21:19
(Received via mailing list)
Martin S. wrote:

> 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})


--
Philip R.
http://tzinfo.rubyforge.org/ -- DST-aware timezone library for Ruby
Martin S. (Guest)
on 2006-04-11 22:59
(Received via mailing list)
Hi,

On Apr 11, 2006, at 7:14 PM, Philip R. wrote:
>> end
> 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 S.
Martin S. (Guest)
on 2006-04-11 23:05
(Received via mailing list)
Hi,

On Apr 11, 2006, at 8:57 PM, Martin S. wrote:
>>> {@account.count}\n"         # empty
>>
>    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
Philip R. (Guest)
on 2006-04-12 13:11
(Received via mailing list)
Martin S. wrote:
> 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 R.
http://tzinfo.rubyforge.org/ -- DST-aware timezone library for Ruby
Richard W. (Guest)
on 2006-04-12 15:08
(Received via mailing list)
On Tuesday, April 11, 2006, at 6:33 PM, Martin S. wrote:
>+----+-------+------------+
>   account = userdata[0]
>I�m very grateful for all help I can get!
>
>--
>Best regards,
>Martin S._______________________________________________
>Rails mailing list
>removed_email_address@domain.invalid
>http://lists.rubyonrails.org/mailman/listinfo/rails

You 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}'".
This topic is locked and can not be replied to.