1

我正在尝试获取数量不为零的用户产品。我尝试以这种方式获取产品,但它为我提供了属于该用户的所有产品,无论数量如何。

@user = User.find(params[:id]) 
@products = @user.products.where(:quantity != 0)
4

1 回答 1

2

Active Record 在这里和那里使用了一点魔法来帮助处理条件,但它仍然是 Ruby,并且有限制。表达方式

:quantity != 0

总是评估为true。所以你的命令最终为:

@products = @user.products.where( true )

这解释了你不想要的结果。

要编码您想要的查询,一种可能的语法应该是

@products = @user.products.where( "quantity != ?", 0 )

使用不同的方式构建 SQL where 子句。占位符语法(使用?和值列表)在这里并不是真正需要的,但您当然应该使用它而不是 Ruby 的变量插值(例如"#{variable}"),以减少对 SQL 注入攻击的脆弱性。

于 2013-09-14T20:10:36.637 回答