相关疑难解决方法(0)

Rails`where`的时间少于查询

建立

Rails的where方法可以在哈希中使用一个范围来生成一个查询,该查询将搜索该范围内的值.例如:

User.where(cash_money: 10..1000)
#=> SELECT `users`.* FROM `users`  WHERE (`users`.`cash_money` BETWEEN 10 AND 1000)
Run Code Online (Sandbox Code Playgroud)

这也可以用于时间戳

User.where(last_deposit: 10.days.ago..1000.days.ago)
#=> SELECT `users`.* FROM `users`  WHERE (`users`.`last_deposit` BETWEEN '2014-05-19 14:42:36' AND '2011-09-02 14:42:36')
Run Code Online (Sandbox Code Playgroud)

我发现你可以使用像这样的哈希语法做一个小于或大于数字的简单

User.where(cash_money: 10..Float::INFINITY)
#=> SELECT `users`.* FROM `users`  WHERE (`users`.`cash_money` >= 10)
Run Code Online (Sandbox Code Playgroud)

同样可以-Float::INFINITY用于少于查询.

有没有办法用时间戳来做到这一点所以我可以得到如下的查询?

SELECT `users`.* FROM `users`  WHERE (`users`.`last_deposit` >= '2014-05-19 14:42:36')
Run Code Online (Sandbox Code Playgroud)

我不能使用Float::INFINITYDate::Infinity使用范围,因为他们都错误ArgumentError: bad value for range.

当前的简单解决方

User.where('`users`.`last_deposit` >= ?', 10.days.ago)
Run Code Online (Sandbox Code Playgroud)

将生成相同的SQL,但如果这可以使用字符串以外的对象完成,我想这样做.

潜力(Meh)答案

这有点糟糕但可以使用Time.at(0)和使用范围来完成 …

mysql sql ruby-on-rails date arel

15
推荐指数
2
解决办法
1万
查看次数

Using greater than or less than in a Rails Active Record query

Questions have_many question_tags.

How can I get all questions that:

  1. Have a question_tag with name "javascript"
  2. Are not answered
  3. Have more than 2 "vote_count"?

Here are the tables:

Questions
  is_answered:boolean
  vote_count:integer

QuestionTags
  name:string
  question_id:integer
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的查询.它做#1和#2.我怎么能做#3?

Question.joins(:question_tags).where(question_tags: {name: "javascript"}, question: {is_answered: false})
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-activerecord

6
推荐指数
1
解决办法
7328
查看次数

标签 统计

ruby-on-rails ×2

arel ×1

date ×1

mysql ×1

rails-activerecord ×1

sql ×1