Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Ruby Ruby Foundations Methods Class Methods

Undefined local variable or method for 'bank_account'. Can't deposit.

I seem to have all the code in my bank_account.rb file just as Jason has in the video, but am getting this error?

Help.

Tim Knight
Tim Knight
28,863 Points

Michael,

Would you mind posting your code here as you have it?

5 Answers

Tim Knight
Tim Knight
28,863 Points

I executed a few calls on the code without any issue:

BankAccount.create_for("Tim", "Knight")
account = BankAccount.find_for("Tim", "Knight")
puts account.full_name   # => Tim Knight
puts account.balance     # => 0
account.deposit(100)
puts account.balance     # => 100
account.withdraw(200)
puts account.balance     # => -100
Tim Knight
Tim Knight
28,863 Points

Oh I see. Basically Jason is just creating a local variable of bank_account to pull the details about a specific item. Since the local variable of bank_balance is a class object of BankAccount you then have access to all the methods you wrote in the code.

Sure.

class BankAccount

def self.create_for(first_name, last_name)
    @accounts ||= []
    @accounts << BankAccount.new(first_name, last_name)
end

def self.find_for(first_name, last_name)
    @accounts.find{|account| account.full_name == "#{first_name} #{last_name}"}
end

def initialize(first_name, last_name)
    @balance = 0
    @first_name = first_name
    @last_name = last_name
end

def full_name
    "#{@first_name} #{@last_name}"
end

def deposit(amount)
    @balance += amount
end

def withdraw(amount)
    @balance -= amount
end

def balance
    @balance
end

end

Tim Knight
Tim Knight
28,863 Points

The code looks okay so far. What are you executing to bring up the error?

I was executing the call Jason did in the course, bank_account.deposit(100).

I think I found the issue. I noticed you called account = BankAccount.find_for("Tim", "Knight")

I didn't do that before trying to deposit. I did it and it worked! Thanks.

Now, do you mind giving me a laymans as to why it worked?

Thanks!