Stack Stack
Stack Stack

Reputation: 147

How to show all data via has_many and belongs_to?

I have two models: Car and Engine. One Car must have one engine.

My model associations

class Car < ActiveRecord::Base
  belongs_to :engine

  attr_accessible :name, :engine_id              
end

and

class Engine < ActiveRecord::Base
  has_many :cars

  attr_accessible :name
end

I know how to show Engine data via Car:

Car.first.engine

This returns

irb(main):001:0> Car.first.engine
  ←[1m←[36mCar Load (0.0ms)←[0m  ←[1mSELECT "cars".* FROM "cars" LIMIT 1←[0m
  ←[1m←[35mEngine Load (0.0ms)←[0m  SELECT "engines".* FROM "engines" WHERE "engines"."id" = 1 LIMIT 1
=> #<Engine id: 1, name: "Benzine", created_at: "2012-11-27 12:09:08", updated_at: "2012-11-27 12:09:08">

But how to show car and engine together?

Sample: car_id: 1, car_name: Audi, engine_name: Benzine

Upvotes: 1

Views: 179

Answers (3)

Stack Stack
Stack Stack

Reputation: 147

Car.joins(:engine).includes(:engine).select("cars.name, engines.name")

Upvotes: 1

Rahul garg
Rahul garg

Reputation: 9362

 res = Car.joins(:engine).select("cars.id,cars.name,cars.model,engines.id,engines.name,...")

Upvotes: 2

idmwsls
idmwsls

Reputation: 11

i'd say the easiest solution would be to create a custom method in your models. for example, in your car model (car.rb), you could try this:

  def info
    # as a string
    return "car: " + self.name + ", engine: " + self.engine.name
    # as a hash
    return { "car" => self.name, "engine" => self.engine.name }
  end

then you'd be able to call Car.first.info

Upvotes: 1

Related Questions