从字符串中隔离一个数字

时间:2014-05-13 19:56:24

标签: ruby-on-rails ruby-on-rails-4

在我看来,我有

<%= version.object_changes %>

以下是输出的示例

  

---!ruby / hash:ActiveSupport :: HashWithIndifferentAccess \ nmanufacturer_id:\ n-   \ n- 2 \ nminiature_id:\ n- \ n- 37 \ ncreated_at:\ n- \ n- 2014-05-13   15:50:08.685560000 Z \ nupdated_at:\ n- \ n- 2014-05-13 15:50:08.685560000   Z \ nid:\ n- \ n- 59 \ n

我想隔离manufacturer_id并用它来显示制造商名称。

<%= Manufacturer.find(xxxxx).name %>

我可以隔离manufacturer_id,如果它是一个哈希值,但它只是一个文本字符串。

我想我想要一种方式来找到行“manufacturer_id: - - x”并取“x”。这可能吗?

1 个答案:

答案 0 :(得分:1)

您在问题中没有提到它,但我认为您在代码中使用了paper_trail gem。

version.object_changes将数据以文本形式存储在数据库中,因此,您无法从中提取ID。但您可以使用version.changeset来获取哈希值的更改。

documentation here上了解详情。

  

区分相邻版本的最佳方法是让PaperTrail为您完成。如果将object_changes文本列添加到版本表,则在安装时使用rails生成paper_trail:install --with-changes选项或手动,PaperTrail将在每个更新版本中存储更改diff(不包括PaperTrail忽略的任何属性) 。您可以使用version.changeset方法来检索它。

编辑:根据以下OP的评论并在答案中更新,我建议使用regexp进行提取,如:

if exp = version.object_changes.match(/manufacturer_id:\n- \n- (\d+)/)
  exp[1]
end
=> "9"