1

車とエンジンの2つのモデルがあります。1台の車には1つのエンジンが必要です。

私のモデルの関連付け

class Car < ActiveRecord::Base
  belongs_to :engine

  attr_accessible :name, :engine_id              
end

class Engine < ActiveRecord::Base
  has_many :cars

  attr_accessible :name
end

車でエンジンデータを表示する方法を知っています:

Car.first.engine

これは

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">

しかし、車とエンジンを一緒に表示するにはどうすればよいですか?

サンプル:car_id:1、car_name:Audi、engine_name:Benzine

4

3 に答える 3

2
 res = Car.joins(:engine).select("cars.id,cars.name,cars.model,engines.id,engines.name,...")
于 2012-11-27T18:07:54.320 に答える
1

最も簡単な解決策は、モデルにカスタムメソッドを作成することだと思います。たとえば、車のモデル(car.rb)で、次のことを試すことができます。

  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

その後、Car.first.infoを呼び出すことができます

于 2012-11-27T13:58:29.493 に答える
1
Car.joins(:engine).includes(:engine).select("cars.name, engines.name")
于 2012-11-28T07:11:59.930 に答える