很抱歉提出这个问题,但我真的是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")
答案 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"})