在include

时间:2017-06-19 12:08:16

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

我刚刚开始使用rails并且在最近2天之间陷入了急切加载。 我有两个模型CarImagesCar has_many :images关联。我做了一个api,用它们的图像返回json数组汽车。我想要单个图像而不是关联的所有图像。 我用的是:

Car.where(:company=>"BMW").as_json(:include=> {:images})

这将返回所有车辆的所有图像。 我希望所有汽车都使用单张图像而不是所有图像阵列。

2 个答案:

答案 0 :(得分:2)

您应该将has_one :image, -> { order(updated_at: :desc) }添加到Car模型。这将为关联定义default_scope

然后你可以得到每辆车只有最后一张更新图像的所有车辆:

Car.where(company: 'BMW').as_json(include: [:image])

答案 1 :(得分:0)

这取决于你的需要。

  1. 如果您需要,请写下:Car.where(company: "BMW").first
  2. 如果您需要最后一次,请写下:Car.where(company: "BMW").last
  3. 对你来说够了吗?

    如果你有has_many关联,你必须选择你需要的记录(可能添加一些标记)。如果没有它,您将拥有所有关联对象的集合。

    使用where(company: "BMW")比使用where(:company => "BMW")

    更好