ActiveRecord_Relation
全部标签 好的,所以我知道在处理非常大的数据时,我们可以使用find_in_batches,据我所知,它完成了Model.all.each的工作以一种非常快速的方式,效率更高现在,我有一个非常大的数据要删除,我正在考虑使用相同的find_in_batches来批量删除它们。下面是我所拥有的(来自rake任务database.rake):old_messages=TextMessage.where("created_at但是,当我运行它时,出现以下错误:ArgumentError:wrongnumberofarguments(0for1..3)/Users/Sunday/.rvm/gems/rub
我在这里冒着手掌到额头的风险,但我不太清楚如何使用Rails的ActiveRecord糖来做到这一点。我有一个tickets表,它有两列(submitter_id和assignee_id),每列都应该引用来自的不同用户users表(特别是users表中的id列)。我希望能够使用ActiveRecord的关联来执行诸如ticket.submitter.name和ticket.assignee.email之类的事情。提交者和受让人只是不同关联名称下的用户对象。我发现的唯一接近我正在做的事情是使用多态关联,但最后我相当确定这不是我真正需要的。我不会有多种类型,提交者和受让人都是用户,很可能是
我想在运行时找到ActiveRecord类的关联...假设我有以下内容:classPerson如何在运行时发现Person“有很多”椅子和笔,反之亦然?我正在寻找一种返回字符串数组的方法(如果存在这样的方法)。即Person.has_many_assocations会返回:["chairs","pens"]和Pen.belongs_to_associations会返回:["person"]我是否遗漏了这样一种存在的方法??感谢您的帮助。 最佳答案 我认为ActiveRecord::Reflection类可能是你要找的。来自文档:Ac
我有一个ActiveRecord模型对象Foo;它代表一个标准的数据库行。我希望能够显示该对象实例的修改版本。我想重用类本身,因为它已经具有我需要的所有Hook和方面。(例如:我已经有一个显示适当属性的View)。基本上我想克隆模型实例,修改它的一些属性,并将它反馈给调用者(View、测试等)。我不希望这些属性修改返回到数据库中。但是,我确实希望在克隆版本中包含id属性,因为它可以更轻松地处理路由助手。因此,我计划调用ActiveRecord::Base.clone(),手动设置克隆实例的ID,然后对新实例进行适当的属性更改。不过这让我很担心;修改后的实例上的一个save()和我的原始
我想同时执行多个聚合函数,例如获取按状态分组的最大和最小id:Model.maximum(:id).minimum(:id).group(:status)这行不通(至少对于Rails3.1.1是这样)——你在最小调用时收到一个错误,说它没有在Fixnum上定义。NoMethodError:undefinedmethod`minimum'for22377:Fixnum我可以为它做原始sql-但只是想知道是否有更高级别/Rails选项...谢谢,克里斯 最佳答案 我有一个类似的问题,我在Rails4中使用groupwithpluck解决
我正在尝试使用以下查询从我的数据库中检索多条记录:User.where('nameilike?','%thomas%')这很好用。现在我想同时检索多条记录并尝试了这个(这在语法上似乎是不正确的):User.where('nameilikeany',['%thomas%','%james%','%martin%'])我做错了什么?所以澄清一下:我想检索与其中一个名称匹配的所有记录,所以它是我正在寻找的OR语句。 最佳答案 你可以这样做User.where('nameilikeany(array[?])',['%thomas%','%j
最近我们部署了一个新版本的应用程序,从那时起我们就发现ActiveRecord存在一些非常奇怪的问题。例如,这是它每天生成数百次的查询片段,通常是正确的:`entries`.`style`ASt1_r25,`entries`.`pdf_visibility`AS,`entries`.`web_visibility`ASt1_r27这不是打字错误,t1_r26不见了,虽然它应该在的地方有一个空格。但只有那一次。这也不是手写SQL,而是ActiveRecord编写查询并决定所有占位符变量。它同样拙劣地破坏了其他查询,将不应该留空(甚至不应该留空)的东西留空,但只是偶尔留空一次。大多数时候都
我正在尝试调试一些代码。一个奇怪的部分是before_save回调被调用了两次,尽管我只打算保存对象一次。为了追踪这是如何发生的,我在类中定义了这些方法:%w[savesave!].eachdo|method_name|define_method(method_name)do|*args|puts"whocalled'#{method_name}'?#{caller.first}"super(*args)endend从这个输出中,我只看到一个持久化调用。我相信save和save!是导致ActiveRecord持久化对象的唯一方法。据我所知,其他持久化方法依赖于这两者之一;例如,upda
我有如下三个关联模型:classProduct当我做类似的事情时:doc=user.documents.builddoc.update_attributes(:product_ids=>[1,2])并且description验证失败,然后我得到false和doc上的相应错误。这正是我想要的。但是,如果doc已经存在,例如:doc=user.documents.firstdoc.update_attributes(:product_ids=>[1,2])并且description验证失败,然后我得到一个ActiveRecord::RecordInvalid错误。我很清楚为什么会这样——i
我正在使用原始/裸机sql插入来提高我服务的写入性能。我的模块中有这样的东西-insert="('#{id}','#{status}','#{some_time_val}')"sql_string="INSERTINTOhistory('device_id','status','time')VALUES#{insert}"ActiveRecord::Base.connection.executesql_string当我编写如下所示的rspec时,它会测试除插入是否通过之外的所有内容。因此,由于rspec、database_cleaner等执行回滚和事务的方式,我的期望永远不会奏效。我尝