在我看来,我有
<%= 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”。这可能吗?
答案 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"