【问题标题】:How can I attach data from a hash to an ActiveRecord collection?如何将哈希中的数据附加到 ActiveRecord 集合?
【发布时间】:2026-01-19 18:40:02
【问题描述】:

我有来自外部服务(Google Analytics API)的数据,我将这些数据提取到哈希中(可以是结构、数组,不重要)。它基本上包含模型某些记录的分析信息。

我想在表格中显示该数据以及我的数据库中记录的详细信息,并且我想知道是否有一种方法可以将数据“附加”到 ActiveRecord 对象,以便它们有另一种方法我可以调用,例如可以从我的外部数据对象填充的nr_clicks

所以我会像这样访问它:

<tr>
  <td><%= item.name %></td>
  <td><%= item.price %></td>
  <td><%= item.nr_clicks %></td>
</tr>

或者只是请求另一个对象中的数据的安全且简单的方法?

<tr>
  <td><%= item.name %></td>
  <td><%= item.price %></td>
  <td><%= @item_clicks[item.id] %></td>
</tr>

注意:我暂时不打算将数据存储在数据库中,因此它应该可以动态处理数据。

【问题讨论】:

  • 您可以使用 serialize docs 将哈希/数组存储在数据库中的文本列中,如果这是您要查找的内容。
  • 不,这不是我要找的,我希望能够使用我得到的数据而不将其提交到数据库。一种临时字段,永远不会进入数据库,但在视图看来,它似乎与项目上的其他属性来自同一来源。

标签: ruby-on-rails ruby data-structures rails-activerecord


【解决方案1】:

好的,那么只是一个带有实例变量的方法?

class Item

  def nr_clicks
    @clicks ||= get_clicks
  end

  private

  def get_clicks
    #code to get data from analytics
  end
end

【讨论】:

  • 有点像,只是我已经在内存中收集了数据,所以不需要单独进行。这个类不应该知道 api 或者事实上关于添加到它的数据的事实。
  • 那么在初始化item之后添加attr_accessors并设置好?
  • 嗯.. 有没有办法在初始化项目后动态添加访问器?我不想用额外的代码污染模型。我已经在使用装饰器,这可能是一个放置它的地方,但是我如何在装饰器中定义访问器? (德雷珀宝石)
  • 老实说恐怕不要使用 Draper。
  • 你为什么害怕?我已经在使用它为我的模型添加与视图相关的方法,并且效果很好,只要我不覆盖原始方法:)