Tag: activerecord

如何更改表单上的validation消息

我正在开发的网站将是西class牙语。 因此,我需要使用该语言的错误消息。 我在Configuration目录下创建了一个名为’en.yml’的文件,以实现此目的。 我在其中添加了以下代码: es: activerecord: errors: models: announcement: attributes: title: blank: “El título no puede estar vacío.” “Eltítulofopuedeestarvacío”的意思是“标题不能为空”。 当我去运行此代码时,我看到如下消息: “标题Eltítulonopuedeestarvacío。” 其中“标题”是字段的名称。 但我不希望它被显示出来。 我只想显示我创建的错误消息。

Rails查询根据嵌套模型的数量进行排序?

我有两个模型:Group&GroupMember 我想返回组,按最高的GroupMember计数排序? 如何在Rails中设置这种类型的连接/查询计数?

有什么区别:before_save和:before_update Active Record回调?

有人可以向我解释:before_update在Ruby on Rails 4上的:before_save和:before_update Active Record回调之间的区别吗? 我阅读了有关Active Record回调的官方文档,但我找不到足够精细的解释。

ActiveRecord何时建立连接?

在我的一些Rails应用程序中,我的ActiveRecord模型似乎在初始化时建立数据库连接(例如,当我执行rails console ),而在其他连接中,似乎只有在我引用模型类或实例化模型对象时才建立连接。 例如,我只去了一个应用程序,打开了Rails控制台并写道: SomeModel.connected? 它返回false 。 我去了另一个应用程序,输入了相同的命令(对于不同的模型),它返回true 。 我去了第三个应用程序并输入了相同的命令。 这一次,它等了一会然后又恢复了true ,这让我觉得connected? 方法由于某种原因触发了连接。 这种行为差异似乎与Rails版本或模型的内容无关。 这可能是我在初始化程序中所做的奇怪事情,但我不这么认为。 那么Rails何时建立连接? 或者预期的行为是什么? 附加信息 我会补充说它似乎没有connected? 返回false,因为Rails 无法连接到数据库。 例如,在我的第一个应用程序中,我做了: SomeModel.connected? # => false SomeModel.table_exists? # or any other command that makes Rails look at db # => true SomeModel.connected? # => true

在Rails查询中获取关联模型的属性

在我的rails应用程序中, 集合有许多项目 ,项目有很多步骤 。 我想抓住集合项目中所有步骤的ID,我想知道我是否可以在一个查询中完成所有操作。 例如,我知道我可以做以下事情 step_ids = [] @collection.projects.each do |project| project.steps.each do |step| step_ids << step.id end end 但是可以做以下事情: @collection.projects.include(:steps).pluck(“step.id”) //这里的语法不正确

通过模块共享范围?

我想通过将共享范围移动到模块中来干掉几个模型,例如: module CommonScopes extend ActiveSupport::Concern module ClassMethods scope :ordered_for_display, order(“#{self.to_s.tableize}.rank asc”) end end 我还想创建测试模块的共享规范。 不幸的是,当我尝试在模型中包含共享范围时,我得到: undefined method `order’ for CommonScopes::ClassMethods:Module 有任何想法吗? 谢谢!

Rails:在after_create中设置属性

我希望ActiveRecord使用回调自动设置一些DB字段。 class Product < ActiveRecord::Base after_create :set_locale def set_locale self.locale = I18n.locale end end 在./script/console我做 p = Product.create p 字段p.locale未设置。 我做错了什么?

存储嵌套JSON的访问器

我有“组织”模型,它存储与组织相关的所有信息。 有一个名为“集成”的JSONB类型的字段,用于存储与组织具有的所有外部服务集成有关的信息。 如何使用商店访问者访问存储在嵌套JSON中的信息,例如: { “mailchimp”: {“api_key”:”vsvsvef”, “list_id”:”12345″}, “sendgrid” : {“username”:”msdvsv”, “password”:”123456″} } 我知道我可以使用这样的商店访问器访问mailchimp: store_accessor :integrations, :mailchimp 如何轻松访问mailchimp的api_key?

如何对活动供稿中的类似商品进行分组

对于社交网站,我有来自您关注的人的活动活动,我想在短时间内将类似类型的活动分组在一起,以获得更紧凑的活动供稿。 想象一下,当你快速接受几件事时,Facebook如何显示逗号分隔列表:’乔喜欢啤酒,足球和筹码。’ 我理解在ActiveRecord Enumerable结果上使用group_by方法,但是需要完成一些初始工作,填充我之后可以分组的属性。 我的问题涉及以可以标记这些分组的方式存储活动数据,然后再次检索它们。 现在我有一个Activity模型,它是提交活动的用户和它链接到的项目之间的连接关联(在上面的例子中,假设’beer’,’football’和’chips’是a的记录喜欢模特)。 除了“喜欢”之外还有其他活动类型(活动,保存collections夹等)。 我正在考虑的是,在创建此关联时,会在完成该类型的最后一次关联时进行检查,如果超过某个时间段,则会增加一个“活动块”计数器,这是一部分活动模型。 稍后,在渲染此活动Feed时,我可以按用户分组,然后键入,然后键入此活动块。 示例:假设在同一天内进行了2次更新。 用户在2:05喜欢2件事,之后在5:45喜欢3件事。 在第三次更新(第二个块的开始)发生在5:45之后,模型检测到已经过了太多时间并且将其活动块计数器递增1,从而在通过以下方式呈现新块时强制执行任何后续更新。 group_by电话: 2:05 Joe likes beer nuts and Hooters. 5:45 Joe likes couches, chips and salsa. 7:00 Joe is attending the Football Viewing Party At Joe’s 我的第一个问题:增加这样一个计数器的有效方法是什么? 它不再是auto_increment,所以我能想到的最简单的事情就是将最后一条记录作为参考点。 但是,这不能来自在上次更新该类型时检查的同一查询,因为稍后更新另一种类型可能已经收到下一个计数器值。 它们不一定是全球唯一的,但那会很好。 我想到的另一个整体策略是另一个名为ActivityBlock的模型,它将类似活动的组合在一起。 在许多情况下,更新将自行隔离,因此为每个单独的活动创建一条记录似乎效率不高。 这些中的任何一个看起来都是一个可靠的策略 我的最后一个问题围绕着分页。 既然我们正在处理块,那么在分页开始之前总是显示一定数量的条目就更难了。单个(隔离的)Activity更新或者当时的块应该只计为1,所以最低我的group_by的一层,我可以合并一个计数器来跟踪我显示的行数,但这意味着我不能再进行一次数据库查询,只需指定一个限制语句。 在我达到页面限制之前,有没有办法在不重复执行其他SQL查询的情况下仍然可以执行此操作? 这将是ActivityBlock模型方法的一个优点,因为我可以轻松地对其应用限制调用,并且块也可以包含自动增量计数器。

如何通过尚未保存的父关联访问ActiveRecord祖父母关联?

我有一种情况,我希望在保存父对象之前访问相关的祖父母。 我可以想到几个黑客,但我正在寻找一种干净的方法来实现这一目标。 以下代码作为我的问题的说明: class Company :departments end class Department < ActiveRecord::Base belongs_to :company has_many :employees end class Employee :department end company = Company.find(1) # => dept = company.departments.build # => empl = dept.employees.build # => empl.company # => Employee#company delegated to department.company, but department is nil 我正在使用Rails 3.2.15。 我理解这里发生了什么,我理解为什么empl.department_id是零; 虽然我希望Rails在调用save之前直接引用预期关联,这样最后一行可以通过未保存的部门对象委派。 有干净的工作吗? 更新:我在Rails 4中也试过这个,这是一个控制台会话: 2.0.0-p247 :001 […]