Articles of activerecord

ActiveRecord – “范围”中的“第一个”方法返回多个记录

我是Rails的新手,我有一个奇怪的问题。 这是一个代码示例: class News { where(pinned: true).first } end 如果有“固定”标志的记录没有问题,当我调用News.pinned返回单个记录时。 我在日志中看到了这个查询: SELECT `news`.* FROM `news` WHERE `news`.`pinned` = 1 ORDER BY `news`.`id` ASC LIMIT 1 但是如果没有带有“固定”标志的记录,当我调用News.pinned ,将执行下两个查询: SELECT `news`.* FROM `news` WHERE `news`.`pinned` = 1 ORDER BY `news`.`id` ASC LIMIT 1 SELECT `news`.* FROM `news` 谢谢!

ActiveRecord的:: UnknownAttributeError?

我只是将应用程序推送到生产Heroku环境。 基本上有一个Bus模型,它有一个seats属性 class Bus < ActiveRecord::Base attr_accessible :seats, # other attributes end 现在我有一个JavaScript前端,POST的JSON用于新总线到buses#create action。 我尝试创建总线时,ActiveRecord遇到错误: : POST www.busables.com/buses dyno=web.1 queue=0 wait=5ms service=65ms status=500 bytes=728 : : ActiveRecord::UnknownAttributeError (unknown attribute: seats): : app/controllers/buses_controller.rb:31:in `new’ : app/controllers/buses_controller.rb:31:in `create’ 参数正在达到控制器动作。 我可以记录它们,然后我得到了以下内容: The bus parameters received: {“seats”=>”24”, “departure_time(1i)”=>”2011”, “departure_time(2i)”=>”11”, “departure_time(3i)”=>”25”, “departure_time(4i)”=>”16”, “departure_time(5i)”=>”15”, “route_attributes”=>{“summary”=>”N51”, “beginning_address”=>”A place”, “terminal_address”=>”Another place”, “distance”=>26362, “duration”=>1753}} […]

当某些东西存储为数组时,Rails where子句

我正在使用PG数据库运行rails 4.2。 我有一个存储在数据库中的项目,如(model Item ): :something => [“1”, “2”, “3”] 我想得到Item.where(:something.include? => “3”) 显然这不起作用 – 但是你打算如何在rails中做到这一点?

如何强制Rails ActiveRecord提交事务刷新

是否可以强制ActiveRecord推送/刷新事务(或只是保存/创建)? 我有一个时钟工作者,可以在后台为几个任务工作者创建任务。 问题是,时钟工作者有时会创建一个任务并将其推送给任务工作者,然后才能将时钟工作者信息完全刷新到数据库,从而导致丑陋的竞争状况。 由于产品的体系结构以及如何生成任务,因此使用after_commit并不可行。 简而言之,我需要能够让一个worker创建一个任务并将该任务刷新到db。

Named_scope中的rails唯一记录?

是否可以使named_scope返回记录对于某列是唯一的? 例如 named_scope :unique_styles, :order =>”title desc”, :limit => 3 这将给我三种风格,但如果我想确定标题不同怎么办? 在这种情况下,可能有三个具有相同样式的记录,我希望这个named_scope只给出标题的唯一值。 所以[“style 1”, “style 1”, “style 1”]是不可能的,它会强迫自己给[“style 1”, “some style 2”, “maybe another 3”] 我认为group可能会这样做,而我现在正在使用它。 如果有人有任何评论,不管这是伟大的。

Activeadmin:如何筛选与两个或多个搜索词匹配的字符串

假设我有一个带有:email字段的User类。 我们假设我使用activeadmin来管理用户。 制作一个返回与一个字符串匹配的电子邮件的filter,例如“smith”,非常简单。 在admin/user.rb ,我只包含该行 filter :email 这给了我一个完成工作的filter小部件。 但是,此filter不允许我搜索多个项的交集。 我可以搜索包含“smith”的电子邮件,但不能搜索包含“smith”和“.edu”的电子邮件。 Google告诉我,activerecord在引擎盖下使用Ransack ,而Ransack演示具有允许多项搜索的“高级”模式。 将多项搜索小部件放入activeadmin的最简单方法是什么? 理想情况下,我想要一个小部件,允许我输入smith .edu或smith AND .edu来过滤包含这两个术语的电子邮件。

validation嵌套属性的存在

如何使用嵌套属性validation模型是否至少有一个关联模型? 这让我很生气,因为我确信我错过了一些简单的事情。 例如,我想要求List始终至少有一个Task。 class List :destroy accepts_nested_attributes_for :tasks, :allow_destroy => true end class Task < ActiveRecord::Base belongs_to :list end 我尝试了很多不同的选择。 1-向列表添加validation: def validate if self.tasks.length < 1 self.errors[:base] << "A list must have at least one task." end end 但是这仍然允许您删除现有列表的所有任务,因为在删除任务时,列表的validation在任务被销毁之前发生。 2-检查在before_save回调中是否有任何任务未标记为销毁 before_save :check_tasks private #look for any task which won’t be deleted def check_tasks for […]

Rails中ActiveRecord中的多个sum()

我想在同时选择其他字段时将多个sums()链接到一个组。 我也更喜欢使用ActiveRecord方法来执行此操作而不是手动构造sql字符串,因为我可能稍后修改ActiveRecord的inheritance类的行为。 例如,我想代表声明(作为例子) select user_id, sum(cost) as total_cost, sum(quantity) as total_quantity from line_items group by user_id 有类似的东西: LineItem.select(:user_id).group(:user_id).sum(:cost).sum(:quantity) 原因是我可能会在以后添加额外的分组和where子句,所有的总和将具有共同点。

rails中的活动管理员 – csv限制

我使用活动管理员0.3.4下载了一个模型的csv,它有大约12,000条记录。 但是csv仅限于10,000行数据。 有没有办法不限制csv下载中的行数?

按JSON数组中的匹配数查询和排序

在Postgres 9.4和Rails的jsonb列中使用JSON数组,我可以设置一个范围,返回包含传递给范围方法的数组中的任何元素的所有行 – 如下所示: scope :tagged, ->(tags) { where([“data->’tags’ ?| ARRAY[:tags]”, { tags: tags }]) } 我还想根据数组中匹配元素的数量来排序结果。 我很欣赏我可能需要超出ActiveRecord的范围才能做到这一点,所以一个vanilla Postgres SQL的答案也很有帮助,但如果它可以包含在ActiveRecord中,那么它可以是一个可链的范围。 根据要求,这是一个示例表。 (实际的架构要复杂得多,但这就是我所关心的。) id | data —-+———————————– 1 | {“tags”: [“foo”, “bar”, “baz”]} 2 | {“tags”: [“bish”, “bash”, “baz”]} 3 | 4 | {“tags”: [“foo”, “foo”, “foo”]} 用例是基于标签查找相关内容。 更多匹配标签更相关,因此结果应按匹配数量排序。 在Ruby中,我有一个像这样的简单方法: Page.tagged([‘foo’, ‘bish’, ‘bash’, ‘baz’]).all 哪个应按以下顺序返回页面: 2, […]