在几个表上查询ActiveRecord?

时间:2016-05-03 01:30:20

标签: ruby activerecord

很抱歉提出这个问题,但我真的是Ruby的新手,我需要帮助来更新我的数据库上的几条记录。

我使用ActiveRecord查询数据库。假设我有一个包含SubProduct的表Product,它也包含SubSubProduct。现在我想编写一个简单的查询来获取Product的所有SubSubProduct。

要获取SubSubProduct列表,我通常会这样做

ssp = SubSubProduct.where(sub_sub_type: "example")

现在在关系元素上使用where子句我该怎么做

ssp = SubSubProduct.where(sub_sub_type: "example", SubProduct.Product.type: "sample")

4 个答案:

答案 0 :(得分:0)

这是通过关联来执行的。

class SubSubProduct
  has_many  :products
end

然后你可以做像

这样的事情
sub_product.products 

它将生成与之相关的所有产品。

答案 1 :(得分:0)

尝试嵌套包含:

`Product.includes(subproducts :: subsubproducts)'

答案 2 :(得分:0)

为此,您需要在模型中设置ActiveRecord关联:

在product.rb中:

class Product < ActiveRecord::Base
  has_many :sub_products
  has_many :sub_sub_products, through: :sub_products
end

在sub_product.rb中:

class SubProduct < ActiveRecord::Base
  belongs_to :product
  has_many :sub_sub_products
end

在sub_sub_product.rb中:

class SubSubProduct < ActiveRecord::Base
  belongs_to :sub_product
end

然后,如果您有产品并想要其SubSubProducts,您可以使用:

# p is a Product object
p.sub_sub_products

答案 3 :(得分:0)

在模型中设置ActiveRecord关联:

#app/models/product.rb:
class Product < ActiveRecord::Base
  has_many :sub_products
end

#app/models/sub_product.rb:
class SubProduct < ActiveRecord::Base
  belongs_to :product
end

#app/models/sub_sub_product.rb:
class SubSubProduct < ActiveRecord::Base
  belongs_to :sub_product
end

你想要的是什么:

ssp = SubSubProduct.where(sub_sub_type: "example", SubProduct.Product.my_type: "sample")

正确的语法:

ssp = SubSubProduct.includes(sub_product: :product).where(sub_sub_type:"example", products: {my_type: "toto"})