Ruby on rails 从字符串中分离一个数字
在我看来,我有Ruby on rails 从字符串中分离一个数字,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,在我看来,我有 <%= version.object_changes %> 下面是它的输出示例 ---!!ruby/hash:ActiveSupport::HashWithInferenceAccess\n制造商\u id:\n- \n-2\n最小值\u id:\n-\n-37\n创建地址:\n-\n-2014-05-13 15:50:08.685560000更新地址:\n-\n-2014-05-13 15:50:08.685560000 Z\nid:\n-\n-59\n 我想
<%= version.object_changes %>
下面是它的输出示例
---!!ruby/hash:ActiveSupport::HashWithInferenceAccess\n制造商\u id:\n-
\n-2\n最小值\u id:\n-\n-37\n创建地址:\n-\n-2014-05-13
15:50:08.685560000更新地址:\n-\n-2014-05-13 15:50:08.685560000
Z\nid:\n-\n-59\n
我想隔离制造商id并使用它显示制造商名称
<%= Manufacturer.find(xxxxx).name %>
如果制造商id是散列,我可以将其分离出来,但它只是一个文本字符串
我想我想要一种说法,找到行“manufacturer\u id:--x”并取“x”。这可能吗?您在问题中没有提到它,但我认为您在代码中使用了gem
version.object\u changes
将数据以文本形式存储在数据库中,因此,您不能像这样从中提取id。但是您可以使用version.changeset
来获取哈希中的更改
在他们的网站上阅读更多关于它的信息
区分相邻版本的最佳方法是让书面记录为您完成。如果在安装时使用rails generate paper\u trail:install--with changes选项或手动将object\u changes文本列添加到versions表中,PaperTrail将在每个更新版本中存储更改差异(不包括PaperTrail忽略的任何属性)。您可以使用version.changeset方法检索它
编辑:根据OP下面的评论和回答中的更新,我建议使用regexp进行提取,如:
if exp = version.object_changes.match(/manufacturer_id:\n- \n- (\d+)/)
exp[1]
end
=> "9"
我没有提到这一点,因为在这种情况下,我的工作超出了文件追踪的正常行为。我已经建立了一个版本模型,并且正在以一种意味着Version.changeset无法工作的方式访问版本。这一切都是试图解决纸上谈兵无法通过人际关系与许多人充分合作的问题的结果。更新答案。在我看来,目前可行的方法是使用正则表达式提取。我编写该方法时考虑到version.object_更改为字符串,并带有上面问题中的值。对我来说很好。您可能需要提供更多的输入或解决此问题:)错误。首先确保
version.object\u changes
确实在发布时返回该类型的字符串值。如果是这样,我认为没有理由不捕捉价值。检查version.object\u changes.match(/manufacturer\u id:-(\d+/)
的输出。对于在视图中插入,这是控制器端逻辑。如果提取了值,则将其实例化为@manufacturer=manufacturer。查找…
并在相应的视图中使用它。我很高兴它帮助了您:)。继续做好工作,;我们都在这里学习。