Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Episode 6 Half-Eagle #8

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

Episode 6 Half-Eagle #8

wants to merge 1 commit into from

Conversation

moserrya
Copy link

Did this using Postgres (not sure if that was the intent). Rather make Automobile inherit from Vehicle if you already have it inheriting from ActiveRecord will all of the attendant naming conventions :'(

Cannot for the life of me figure out how to return vehicle count using a class variable. Let's say I put @@count = 0 inside of the vehicle class - think I want to put @@count += 1 inside of def initialize, but can't do it because of ActiveRecord - get wrong number of arguments (1 for 0). Tried def after_initialize, but this proved useless. Is there some way to make this work?

end

def self.count_blue_hondas
blue_hondas = self.all.count {|vehicle| vehicle.make == "Honda"; vehicle.color == "blue"; vehicle.model == "Accord"}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure this is what you meant...

{|vehicle| vehicle.make == "Honda"; vehicle.color == "blue"; vehicle.model == "Accord"}

This will resolve to (assuming it is a blue Honda Accord)

[true; true; true]

But if it was a blue Toyota Accord, it would be:

[false; true; true]

I'll add some code to the main description on better way to do this

@jwo
Copy link
Member

jwo commented Dec 26, 2012

Cool that you did it using Postgres -- was not the intent, but sure, why not. From here, going to assume you were not using Postgres; just in memory ruby objects:

If you want to have a count of the number of objects created, then you need to store the vehicles created. Something like this:

class Vehicle
  @@vehicles = []
  def count
    @@vehicles.count
  end
end

class Automobile
  def initialize
    @@vehicles = self
  end
end

Then, you can do:

Vehicles.count

OK, so let's assume you were using Postgres. You have two options:

save the vehicles

Rather than Automobile.new, use Automobile.create. Then ask the database for the count:

Automobile.count
Automobile.where(make: "Honda").where(color: "blue").where(model: "Accord").count

Still track in memory

class Vehicle < ActiveRecord::Base
  @@vehicles = []
  def count
    @@vehicles.count
  end
end

class Automobile < Vehicle

  def after_initialize
    @@vehicles << self
  end
end

@jwo
Copy link
Member

jwo commented Dec 26, 2012

Let me know if you have any questions!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants