我的产品索引会退回所有产品,但我只想要那些有照片的产品。
控制器:
@products = Product.all.includes(:photos)
型号:
class Product < ActiveRecord::Base
has_many :photos
accepts_nested_attributes_for :photos, allow_destroy: true
end
class Photo < ActiveRecord::Base
has_attached_file :image
belongs_to :product
end
架构:
create_table "photos", force: true do |t|
t.integer "product_id"
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.integer "user_id"
end
add_index "photos", ["product_id"], name: "index_photos_on_product_id", using: :btree
add_index "photos", ["user_id"], name: "index_photos_on_user_id", using: :btree
create_table "products", force: true do |t|
t.string "name"
t.integer "price"
t.integer "user_id"
t.boolean "sold", default: false
end
答案 0 :(得分:1)
您想要抓取至少有一个products
的{{1}}?像这样使用内连接:
photo
这是最好的方式,IMO。
但是(只是为了向您展示可能的内容)您还可以获取@products = Product.
joins(:photos).
where(products: {sold: false}).
group("products.id")
表中包含ID的products
。
photos
答案 1 :(得分:0)
也许这可行。 .includes允许在其上调用。
Product.all.includes(:photos).where("image != ?", nil)
答案 2 :(得分:0)
如何简单:
@products = Product.include(:photos).select{ |prod| prod.photo.present? }