Rails:找到嵌套属性的位置

时间:2015-01-28 09:02:13

标签: ruby-on-rails-4 paperclip

我的产品索引会退回所有产品,但我只想要那些有照片的产品。

控制器:

@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

3 个答案:

答案 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? }