gpt4 book ai didi

ruby-on-rails - 事件记录 rails 上的条件 3

转载 作者:数据小太阳 更新时间:2023-10-29 08:15:13 25 4
gpt4 key购买 nike

我正在尝试添加一个条件,其中只有满足条件的记录才会从模型中获取。例如,我试图只从 :price 大于或不等于 0 的事务模型中获取记录(我试过 > 和 != 但在示例中都不起作用下)。

price = Transaction.where(:company_id => company).where(:price != 0.00)

我也试过这个:

price = Transaction.where(:company_id => company).where(:price != 0.00).collect{|item| if item.price.to_f > 0.00 {item.price.to_f} end}

...以及上述两个无效的其他变体。

上面的第一个例子没有产生错误,但根本不起作用。条件被忽略。第二个示例产生语法错误。

我也很确定有一种方法可以在 SQL 中使用条件来执行此操作,但不知道如何去做。

有什么建议吗?

最佳答案

这个:

.where(:price != 0.00)

等同于说:

.where(true)

作为 Symbol 永远不会等于 Float; where(true) 是没有意义的,因为它只是将数据库的真实文字('t' 对于 PostgreSQL,1 在 SQLite 和 MySQL 中)添加到WHERE 子句并且没有做任何有用的事情;例如,如果您说:

Transaction.where(:company_id => company).where(:price != 0.00)

那么你的 SQL 在 PostgreSQL 中会像这样结束:

select * from transactions where company_id = #{company} and 't'

这和刚才说的一样

select * from transactions where company_id = #{company}

当一个查询让你感到困惑时,有时在 Rails 控制台的末尾添加一个 .to_sql 并查看 SQL 最终做了什么(如果你不了解 SQL 那么如果你打算以任何身份使用关系数据库,你应该学习它。

您想将比较结果发送到数据库,而不是在 Ruby 中执行:

price = Transaction.where(:company_id => company)
.where('price != ?', 0)

我假设您的 price 列是小数类型而不是浮点类型;如果我错了,请立即将其更改为十进制。

关于ruby-on-rails - 事件记录 rails 上的条件 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9713578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com