Tag: sql

Rails:ActiveRecord db排序操作不区分大小写

我正在尝试学习rails [通过遵循课程中的SAAS课程]并使用ActiveRecord处理简单的Movie表。 我想显示所有标题已排序的电影。 我希望它不区分大小写。 我试过这样做: Movie.all(:conditions => [“lower(title) = ?”, title.downcase],:order => “title DESC”) =>undefined local variable or method `title’ for # 我认为它不承认较低(标题)。 这是实现案件分类的最佳方式吗? 谢谢!

Rails 3 Sum两个字段的乘积

我需要计算我的Rails 3应用程序中两个字段的乘积之和(即相当于Excel的sumproduct函数)。 Rails中是否有一个方法可以帮助解决这个问题,如果没有,那么使用自定义sql的rails代码是什么? 例如,酒店有很多房间。 房间具有平方英尺(平方英尺),数量(大小)和hotel_id的属性。 我想计算一家酒店所有客房的总平方英尺。 在SQL中,对于Hotel.id = 8,我相信以下语句将起作用: select sum(rooms.sqft * rooms.quantity) as SumSqft from rooms inner join hotels on rooms.hotel_id = hotels.id where hotels.id = 8;

通过OR或AND连接(粘合)条件(Arel,Rails3)

我有几个复杂的查询(使用子查询等…)并希望将它们与OR或AND语句粘合在一起。 例如: where1=table.where(…) where2=table.where(…) 我想要的东西 where3=where1.or where2 下一个示例对我不起作用: users.where(users[:name].eq(‘bob’).or(users[:age].lt(25))) 因为我有几个where(..)查询,我想连接它们 。 换一种说法 我有3个方法:首先返回第一个,第二个,第三个 – 或者连接。 我必须能够在我的应用程序中使用所有3种方法并保存DRY代码

如何通过SQL函数使属性设置器发送值

我试图让一个ActiveRecord模型中的属性设置器在rails生成其sql查询之前将其值包装在text2ltree()postgres函数中。 例如, post.path = “1.2.3” post.save 应该产生类似的东西 UPDATE posts SET PATH=text2ltree(‘1.2.3’) WHERE id = 123 # or whatever 这样做的最佳方法是什么?

Rails`where`的时间少于查询

建立 Rails’where方法可以在哈希中获取范围以生成将搜索范围内的值的查询。 例如: User.where(cash_money: 10..1000) #=> SELECT `users`.* FROM `users` WHERE (`users`.`cash_money` BETWEEN 10 AND 1000) 这也可以用于时间戳 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’) 我发现你可以使用这样的哈希语法做一个小于或大于数字的简单 User.where(cash_money: 10..Float::INFINITY) #=> SELECT `users`.* FROM `users` WHERE (`users`.`cash_money` >= 10) 对于少于查询,使用-Float::INFINITY可以完成相同的操作。 题 有没有办法用时间戳来做到这一点,所以我可以得到如下的查询? SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` >= ‘2014-05-19 […]

有没有办法反转ActiveRecord :: Relation查询?

假设我们有以下内容: irb> Post.where(:hidden => true).to_sql => “SELECT `posts`.* FROM `posts` WHERE posts.hidden = 1” 我们能以某种方式得到一个倒置的SQL查询吗? 我在寻找什么,应该是这样的: irb> Post.where(:hidden => true).invert.to_sql => “SELECT `posts`.* FROM `posts` WHERE NOT (posts.hidden = 1)”

如何在Rails 3/4中批量运行更新?

我需要批量更新数千条记录,我想分批处理更新。 首先,我试过: Foo.where(bar: ‘bar’).find_in_batches.update_all(bar: ‘baz’) …我希望生成SQL,如: “UPDATE foo SET bar = ‘baz’ where bar=’bar’ AND id > (whatever id is passed in by find_in_batches)” 这不起作用,因为find_in_batches返回一个数组,而update_all需要一个ActiveRecord关系。 这是我接下来尝试的: Foo.where(bar: ‘bar’).select(‘id’).find_in_batches do |foos| ids = foos.map(&:id) Foo.where(id: ids).update_all(bar: ‘baz’) end 这有效,但它显然运行一个选择后跟更新,而不是基于我的’where’条件的单个更新。 有没有办法清理它,以便选择和更新不必是单独的查询?

Rails PG :: UndefinedTable:错误:缺少表的FROM子句条目

我有模特 class Offer < ActiveRecord::Base belongs_to :agency end class Agency < ActiveRecord::Base has_many :offers end 当我提出这样的要求时 – 一切都很好 @offers = Offer.with_state(:confirmed). includes(:destination, :cruise_line, :ship). paginate(per_page: 10, page: params[:page]).decorate 但我想只选择属于active代理商的商品( agencies表中的列state ),所以我尝试这样做: @offers = Offer.with_state(:confirmed). includes(:destination, :cruise_line, :ship). joins(:agency). where(agency: {state: ‘active’}). paginate(per_page: 10, page: params[:page]).decorate 完成此操作后,我收到错误PG::UndefinedTable: ERROR: missing FROM-clause entry for table “agency” 。 我的代码出了什么问题? […]

Rails:有很多通过关联 – 找到AND条件,而不是OR条件

我的ActiveRecord模型中有以下查询方法: def self.tagged_with( string ) array = string.split(‘,’).map{ |s| s.lstrip } select(‘distinct photos.*’).joins(:tags).where(‘tags.name’ => array ) end 因此,这将查找从逗号分隔列表中获取标记并转换为数组的所有记录。 目前,这会将记录与任何匹配的标记匹配 – 如何使其在匹配所有标记的位置工作。 IE:如果我现在输入:“blue,red”,那么我将获得所有用蓝色或红色标记的记录。 我想匹配所有用蓝色和红色标记的记录。 建议? – 编辑 – 我的模型是这样的: class Photo :destroy has_many :tags, :through => :taggings … def self.tagged_with( string ) array = string.split(‘,’).map{ |s| s.lstrip } select(‘distinct photos.*’).joins(:tags).where(‘tags.name’ => array ) end … end […]

与ActiveRecord和Rails 3的复杂JOIN

我有以下型号: class User :memberships end class Group :memberships end class Membership < ActiveRecord::Base belongs_to :user belongs_to :group end class Post < ActiveRecord::Base belongs_to :group end 我必须找到属于用户所属组的所有post。 我用这种方法做到了: @post = Post.joins(:group => {:memberships => :user}).where(:memberships => {:user_id => current_user.id}) 但它会产生效率低下的SQL: SELECT “posts”.* FROM “posts” INNER JOIN “groups” ON “groups”.”id” = “posts”.”group_id” INNER JOIN “memberships” ON “memberships”.”group_id” […]