我正在尝试获取数量不为零的用户产品。我尝试以这种方式获取产品,但它为我提供了属于该用户的所有产品,无论数量如何。
@user = User.find(params[:id])
@products = @user.products.where(:quantity != 0)
我正在尝试获取数量不为零的用户产品。我尝试以这种方式获取产品,但它为我提供了属于该用户的所有产品,无论数量如何。
@user = User.find(params[:id])
@products = @user.products.where(:quantity != 0)
Active Record 在这里和那里使用了一点魔法来帮助处理条件,但它仍然是 Ruby,并且有限制。表达方式
:quantity != 0
总是评估为true
。所以你的命令最终为:
@products = @user.products.where( true )
这解释了你不想要的结果。
要编码您想要的查询,一种可能的语法应该是
@products = @user.products.where( "quantity != ?", 0 )
使用不同的方式构建 SQL where 子句。占位符语法(使用?
和值列表)在这里并不是真正需要的,但您当然应该使用它而不是 Ruby 的变量插值(例如"#{variable}"
),以减少对 SQL 注入攻击的脆弱性。