Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails ActiveRecord 4:编写大于_Ruby On Rails_Ruby On Rails 4_Activerecord - Fatal编程技术网

Ruby on rails Rails ActiveRecord 4:编写大于

Ruby on rails Rails ActiveRecord 4:编写大于,ruby-on-rails,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby On Rails 4,Activerecord,我知道 Object.where('key > ?', value) 工作 但是,如果查询碰巧涉及多个表,并且有多个键列,它可能会在生成查询时中断: SELECT "tablename".* FROM "tablename" WHERE "tablename"."user_id" = $1 AND (key > 0) [["user_id", 29]] 解决办法是 Object.where('tablename.key > ?', value) 但是有没有一种方法

我知道

Object.where('key > ?', value) 
工作

但是,如果查询碰巧涉及多个表,并且有多个
列,它可能会在生成查询时中断:

SELECT "tablename".* FROM "tablename"  WHERE "tablename"."user_id" = $1 AND (key > 0)  [["user_id", 29]]
解决办法是

Object.where('tablename.key > ?', value) 
但是有没有一种方法来写这个呢?我的应用程序有(强制)奇怪的表名,我不想把它们写在那个里,它们是由活动记录动态添加的


谢谢

如果要从一个对象(一个表)进行查询,可以将表名放到where子句中

Object.where('key > ?', value) 

不幸的是,这是最好的方法

如果从一个对象(一个表)进行查询,可以在where子句中删除表名

Object.where('key > ?', value) 

不幸的是,这是最好的方法

在这一点上,我个人仍然会尝试使用AR,并使用范围和哈希查询做一些事情:

Object.where(tablename: { key: value..Float::INFINITY}) # If value is a number
Object.where(tablename: { key: value..DateTime::Infinity.new}) # If value is a DateTime

我个人仍然会尝试在这一点上使用AR,并使用范围和哈希查询做一些事情:

Object.where(tablename: { key: value..Float::INFINITY}) # If value is a number
Object.where(tablename: { key: value..DateTime::Infinity.new}) # If value is a DateTime

这有点冗长,但您可以使用。比如说

Object.where(Object.arel_table[:key].gt(123))
将选择
key>123
所在的对象

如果我这样做的话,我可能会定义一些助手方法,也许是类似于

class Foo < ActiveRecord::Base
  def self.column(name)
    Foo.arel_table[name]
  end
  #now you can do
  def self.some_method
    Foo.where(column(:key).gt(123))
  end
end
class Foo
有点冗长,但您可以使用。比如说

Object.where(Object.arel_table[:key].gt(123))
将选择
key>123
所在的对象

如果我这样做的话,我可能会定义一些助手方法,也许是类似于

class Foo < ActiveRecord::Base
  def self.column(name)
    Foo.arel_table[name]
  end
  #now you can do
  def self.some_method
    Foo.where(column(:key).gt(123))
  end
end
class Foo
我没有看到任何大于条件。
键>30
相当于
键在30和无穷大之间,因此上面的范围。明白了!没有看到
谢谢。我没有看到任何大于条件。
键>30
相当于
键介于30和无穷大之间,因此是上面的范围。明白了!没有看到
谢谢