新手问题 has_one 和 belongs_to 之间怎么通过 where 查询?

QueXuQ · 2013年06月20日 · 最后由 yesmeck 回复于 2013年06月20日 · 2038 次阅读

我有两个 model

class Fitting < ActiveRecord::Base
  has_one :stock
end

class Stock < ActiveRecord::Base
  #有字段数量amount
  belongs_to :fitting
end

我想做的事情是,找出所有的 fitting,但是他的 stock 下的 amount > 0.不要通过 stock 找出 fitting。 我看了一些文档用 includes 和 joins 是可以办到的,我写了如下查询:

Fitting.includes(:stock).where(['stock.amount = ?', 0]).all
Fitting.where("stock.amount > 0")
Fitting.includes(:stock).where(stock: {amount > 0})
Fitting.joins(:stock).where("stock.amount > 0")

都是不可行的,我看了: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html http://ihower.tw/rails3/activerecord-relationships.html 参考上面的文档就这么写的,可是还是查不到,请问是什么原因导致的呢?

我也正在跟一個叫 Stock 的 Model 搏斗啊!!!

Fitting.joins(:stock).where("stock.amount > 0")

应该是对的,不知道你为什么找不出来,可以看看日志里这句话生成的 SQL,然后数据库里跑一下这个 SQL 看看有没数据出来。

#1 楼 @yesmeck

Fitting.joins(:stock).where("stocks.amount > 0")

原来是这样,刚刚你说了 joins 是可行后,我就想到了表的名是复数的。然后就找到解决方法了。 估计你涉及 stock,也是做仓库的事情吧?

股票。。。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号