Rails 5包括eagerloading

时间:2017-07-29 23:48:07

标签: ruby-on-rails

我有一个照片模型,它的照片可以是一个Bucket模型。 Bucket模型是Facet模型的子类。

class Photo < ActiveRecord::Base
  has_many :facets
  has_one :bucket
end


class Facet < ApplicationRecord
  # validates_uniqueness_of :user, :scope => :photo_id
  belongs_to :photo
  belongs_to  :user
end

class Bucket < Facet
  belongs_to :photo
  belongs_to  :user
  validates :user_id, uniqueness: true
end

当我获取存储桶中的照片时,使用include我希望获得Photo属性+ Bucket属性。但是我只获得了Photo属性,我使用了包含这样的内容:

Photo.includes(:facets).find( 7)

Facet表:

  create_table "facets", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci" do |t|
    t.integer "user_id"
    t.integer "photo_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "type"
    t.string "comment"
    t.integer "tag_id"
    t.bigint "photos_id"
    t.index ["photos_id"], name: "index_facets_on_photos_id"
    t.index ["user_id", "type", "comment", "tag_id"], name: "index_facets_on_user_id_and_type_and_comment_and_tag_id", unique: true
  end

1 个答案:

答案 0 :(得分:1)

不,您正在获得方面,但您需要使用association helpers访问它们。

has_many :facets在您的facets条记录上创建一个名为Photo的关联方法。

假设:

photo = Photo.includes(:facets).find(7)

您可以通过以下方式查看相关方面:

photo.facets