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和无穷大之间,因此是上面的范围。明白了!没有看到。
谢谢