has_many和No方法错误问题

时间:2015-06-10 23:31:23

标签: ruby-on-rails ruby

我有两张桌子:商店和产品。商店模型有has_many :products,商品有belongs_to :store

我试图在rails控制台中尝试这样做:

Store.where(open: true).products.where("created_at <= ?", 1.month.ago)

并得到错误(稍微复述):NoMethodError: undefined method products for #<Store

2 个答案:

答案 0 :(得分:2)

不是一件容易的事情 - products是在Store的实例上定义的方法,您在关系上调用它。我可能会选择:

Product.where(store_id: Store.where(open:true).pluck(:id)).where("created_at <= ?", 1.month.ago)

这将生成两个db调用,但也返回一个干净且易于查询的范围。另一种方法是使用join:

Product.joins(:store).where(store: { open: true }).where("created_at <= ?", 1.month.ago)

这将使用一个查询来完成工作,但由于连接,很容易轻松地操作生成的范围。

答案 1 :(得分:2)

你倒退了。由于您可以拥有多个商店,因此Rails不会返回open: true的所有商品。

您需要加入并查找商店开放的产品。

Product.joins(:store).where(store: {open: true}).where("created_at <= ?", 1.month.ago)