Tag: activerecord

如何在Rails的WHERE子句中使用ANY而不是IN?

我曾经有一个像这样的查询: MyModel.where(id: ids) 其中生成sql查询如下所示: SELECT "my_models".* FROM "my_models" WHERE "my_models"."id" IN (1, 28, 7, 8, 12) 现在我想改变这个使用ANY而不是IN 。 我创build了这个: MyModel.where("id = ANY(VALUES(#{ids.join '),('}))" 现在,当我使用空数组ids = []我得到以下错误: MyModel Load (53.0ms) SELECT "my_models".* FROM "my_models" WHERE (id = ANY(VALUES())) ActiveRecord::JDBCError: org.postgresql.util.PSQLException: ERROR: syntax error at or near ")" ActiveRecord::StatementInvalid: ActiveRecord::JDBCError: org.postgresql.util.PSQLException: ERROR: syntax error at or near […]

如何根据属于第一个模型的另一个模型的属性来查询模型?

如果我有一个模型Person ,其中每辆Vehicle和每辆Vehicle都可以是car或motorcycle ,那么我怎样才能查询所有拥有摩托车的人和有汽车的人? 我不认为这是正确的: Person.joins(:vehicles).where(vehicle_type: 'auto') Person.joins(:vehicles).where(vehicle_type: 'motorcycle')

急切加载多态

使用Rails 3.2,这个代码有什么问题? @reviews = @user.reviews.includes(:user, :reviewable) .where('reviewable_type = ? AND reviewable.shop_type = ?', 'Shop', 'cafe') 这引起了这个错误: 不能急于加载多态关联:可查看 如果我删除了reviewable.shop_type = ? 条件,它的作品。 如何根据shop.shop_type和shop.shop_type (其实是shop.shop_type )进行shop.shop_type ?

Rails的find_or_create由多个属性?

活动logging中有一个方便的dynamic属性叫做find_or_create_by: Model.find_or_create_by_<attribute>(:<attribute> => "") 但是,如果我需要find_or_create多个属性呢? 假设我有一个模型来处理Group和Member之间的M:M关系,称为GroupMember。 我可以有很多实例,其中member_id = 4,但我不希望多于一次的实例,其中member_id = 4和group_id = 7我试图找出是否有可能做这样的事情: GroupMember.find_or_create(:member_id => 4, :group_id => 7) 我意识到可能有更好的方法来处理这个问题,但是我喜欢find_or_create的方便。

Rails 5:ActiveRecord OR查询

你如何做Rails 5 ActiveRecord or查询? 此外,是否有可能链or与ActiveRecord查询的地方?

ActiveRecord查询联盟

我用Ruby on Rail的查询界面写了一些复杂的查询(至less对我来说): watched_news_posts = Post.joins(:news => :watched).where(:watched => {:user_id => id}) watched_topic_posts = Post.joins(:post_topic_relationships => {:topic => :watched}).where(:watched => {:user_id => id}) 这两个查询都可以自行工作。 两个都返回Post对象。 我想将这些post合并成一个ActiveRelation。 由于在某个时候可能会有数十万个职位,因此需要在数据库层面进行。 如果它是一个MySQL查询,我可以简单地使用UNION运算符。 有谁知道我能否用RoR的查询界面做类似的事情?

如何在Ruby中replace重音拉丁字符?

我有一个ActiveRecord模型, Foo ,它有一个name字段。 我希望用户能够按名称search,但我希望search忽略大小写和任何重音符号。 因此,我还存储了一个canonical_name字段来search: class Foo validates_presence_of :name before_validate :set_canonical_name private def set_canonical_name self.canonical_name ||= canonicalize(self.name) if self.name end def canonicalize(x) x.downcase. # something here end end 我需要填写“这里的东西”,以取代重音字符。 还有比这更好的吗? x.downcase.gsub(/[àáâãäå]/,'a').gsub(/æ/,'ae').gsub(/ç/, 'c').gsub(/[èéêë]/,'e')…. 而且,对于这个问题,因为我不在Ruby 1.9上,所以我不能把这些Unicode文字放在我的代码中。 实际的正则expression式看起来更丑陋。

ActiveRecord.find(array_of_ids),保存顺序

在Rails中执行Something.find(array_of_ids)时,结果数组的顺序不依赖于array_of_ids的顺序。 有什么办法可以find并保存订单? 自动柜员机我手动sortinglogging基于ID的顺序,但这是一种跛脚。 UPD:如果可以使用:order param和某种SQL子句指定顺序,那么如何?

inverse_of做什么? 它产生了什么SQL?

我试图把我的头inverse_of ,我不明白。 什么生成的SQL看起来像,如果有的话? 如果与:has_many , :belongs_to和:has_many_and_belongs_to一起使用, inverse_of选项是否performance出相同的行为? 对不起,如果这是一个基本的问题。 我看到这个例子: class Player < ActiveRecord::Base has_many :cards, :inverse_of => :player end class Card < ActiveRecord::Base belongs_to :player, :inverse_of => :cards end

Ruby on Rails。 如何在一个:属于关系中使用Active Record .build方法?

我一直无法find在Rails中的.build方法的任何文档(我目前使用2.0.2)。 通过实验,似乎可以使用构build方法在logging保存之前将logging添加到has_many关系中。 例如: class Dog < ActiveRecord::Base has_many :tags belongs_to :person end class Person < ActiveRecord::Base has_many :dogs end # rails c d = Dog.new d.tags.build(:number => "123456") d.save # => true 这将正确保存狗和标签的外键。 这似乎并不适用于belongs_to关系。 d = Dog.new d.person.build # => nil object on nil.build 我也试过了 d = Dog.new d.person = Person.new d.save # => true […]