【问题标题】:How to show all data via has_many and belongs_to?如何通过 has_many 和 belongs_to 显示所有数据?
【发布时间】:2012-11-27 13:46:12
【问题描述】:

我有两个模型:汽车和发动机。 一辆车必须有一个引擎。

我的模特协会

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 显示引擎数据:

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: 奥迪, engine_name: Benzine

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord associations


    【解决方案1】:
     res = Car.joins(:engine).select("cars.id,cars.name,cars.model,engines.id,engines.name,...")
    

    【讨论】:

    • Car.joins(:engine).select("cars.id, cars.model_id,engines.id,engines.name") 汽车负载 (1.0ms) SELECT cars.id, cars.model_id ,engines.id,engines.name FROM "cars" INNER JOIN "engines" ON "engines"."id" = "cars"."engine_id" => [#]跨度>
    【解决方案2】:

    我想说最简单的解决方案是在您的模型中创建自定义方法。例如,在您的汽车模型 (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

    【讨论】:

    • 我想要一个 SQL 表。 SQL 中的类比 - 内连接
    【解决方案3】:
    Car.joins(:engine).includes(:engine).select("cars.name, engines.name")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多