Forum: Ruby on Rails Newb question...get info from the db

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.
Chris G. (Guest)
on 2009-03-10 01:04
I am using a mysql db and I want to pull some info from the db. I think
my problem is that I am trying to get the data from an object that
doesn't exist in my MemberController. My code:
[code]
class MemberController < ApplicationController
  def index
    @login = User.find_by_login(params[:l])
    flash[:notice] = @login + ", you've logged in successfully"
  end
end
[/code]

the table in the db is the User table and it has a column of login.
bill walton (Guest)
on 2009-03-10 01:17
(Received via mailing list)
Hi Chris,

On Tue, 2009-03-10 at 00:04 +0100, Chris G. wrote:
> I am using a mysql db and I want to pull some info from the db. I think
> my problem is

You'll find it easier to get help here if you'll post the error message
that demonstrates your problem, along with the code that the error
message tells you is causing the problem.

> that I am trying to get the data from an object that
> doesn't exist in my MemberController. My code:
> [code]
> class MemberController < ApplicationController
>   def index
>     @login = User.find_by_login(params[:l])
>     flash[:notice] = @login + ", you've logged in successfully"
>   end
> end
> [/code]

However, in this case you may well have told us the probable cause of
the problem.

> the table in the db is the User table and it has a column of login.

Rails' default is that the table name is a plural version of the model
name.  That's because the Model typically represents a single record
from a table.  So the table named Users holds lots of records that are
access via the User model.

HTH,
Bill
Chris G. (Guest)
on 2009-03-10 01:24
> Rails' default is that the table name is a plural version of the model
> name.  That's because the Model typically represents a single record
> from a table.  So the table named Users holds lots of records that are
> access via the User model.

Im sorry the table name is users...here is the error message:
NoMethodError in MemberController#index

undefined method `+' for #<User:0x44d3ca4>

RAILS_ROOT: C:/Ruby/MyProjects/ipod-give-away.com
Application Trace | Framework Trace | Full Trace

C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/attribute_methods.rb:260:in
`method_missing'
app/controllers/member_controller.rb:4:in `index'

Request

Parameters:

{"l"=>"ballhogjoni"}

Show session dump

Response

Headers:

{"cookie"=>[],
 "Content-Type"=>"",
 "Cache-Control"=>"no-cache"}
Harold (Guest)
on 2009-03-10 01:49
(Received via mailing list)
In that case, try:

class MemberController < ApplicationController
  def index
    @user= User.find_by_login(params[:l])
    flash[:notice] = @user.login + ", you've logged in successfully"
  end
end



On Mar 9, 7:24 pm, Chris G. <removed_email_address@domain.invalid>
bill walton (Guest)
on 2009-03-10 01:54
(Received via mailing list)
On Tue, 2009-03-10 at 00:24 +0100, Chris G. wrote:
>
>
> {"l"=>"ballhogjoni"}

What does the index method in member_controller.rb look like?
Chris G. (Guest)
on 2009-03-10 01:59
Harold wrote:
> In that case, try:
>
> class MemberController < ApplicationController
>   def index
>     @user= User.find_by_login(params[:l])
>     flash[:notice] = @user.login + ", you've logged in successfully"
>   end
> end
>
>
>
> On Mar 9, 7:24�pm, Chris G. <removed_email_address@domain.invalid>

Your changes worked...What was I doing wrong?
Harold A. Giménez Ch. (Guest)
on 2009-03-10 02:05
(Received via mailing list)
OK Great...

You were calling the + method, which concatenates two string objects, on
a
User object. In your original code, the @login variable did not hold a
string object, but a user object (returned by the call to
User.find_by_login( ... ).

Ruby was rightfully complaining that the + method was not defined on the
user object. @user.login returns a string, which does have the + method
and
therefore you can concatenate with the rest of your string (in the flash
message).



On Mon, Mar 9, 2009 at 7:59 PM, Chris G. <
Chris G. (Guest)
on 2009-03-10 02:11
Harold A. Giménez Ch. wrote:
> OK Great...
>
> You were calling the + method, which concatenates two string objects, on
> a
> User object. In your original code, the @login variable did not hold a
> string object, but a user object (returned by the call to
> User.find_by_login( ... ).
>
> Ruby was rightfully complaining that the + method was not defined on the
> user object. @user.login returns a string, which does have the + method
> and
> therefore you can concatenate with the rest of your string (in the flash
> message).
>
>
>
> On Mon, Mar 9, 2009 at 7:59 PM, Chris G. <

oooo ok in PHP (what im used to programming), I was assigning @login =
User.find_by_login(params[:l]) which would, in php, tell php the @login
is a string and not an object. I have to get used to everything being an
object in ruby.
This topic is locked and can not be replied to.