ruby-on-rails - Rails 迭代对一个属性使用连接方法
问题描述
当有人输入与数据库匹配的表单数据并且他们希望通过电子邮件将所有数据发送给他们时,我正在向客户发送邮件。
因此,我选择使用以下每个属性进行迭代:
h1 The customer registration form has been submitted.
-@customer.attributes.each do |k, v|
ul
li
strong #{k.underscore.split('_').join(' ').titleize}:
' #{v}
然后它将显示如下内容:
ID: 200
First Name:Bill
Last Name:Smith
Email:no@no.com
Business Segments:["Purchasing", "Residential", "Commercial"]
如果我保持原样,邮件程序将显示电子邮件。但是,每当我尝试 #{v.join(', ')} 时,它都会失败。因此,我对其进行了测试,确定它可以正常工作,因为有整数。那么如何只对业务段的属性应用join方法呢?
我尝试了以下方法无济于事:
-@customer.attributes.each do |k, v|
ul
li
strong =k.underscore.split('_').join(' ').titleize + ': '
- if k != business_segments
=v
- else
=v.join(', ')
这不会正确触发。
解决方案
我倾向于使用以下内容:
ul
- @customer.attributes.each do |k, v|
li
strong = k.titleize + ': '
= v.is_a?(Array) ? v.join(', ') : v
几点注意事项:
我已经把
ul
循环拉到外面了,因为你很可能在一个列表之后,属性填充它titleize
应该足以在不进行其他修改的情况下转换测试- 最后一行使用三元来确定数据是数组还是其他,并按要求呈现文本
顺便说一句,Rubocop 的风格指南建议使用is_a?
over kind_of?
,而且我看到一些讨论建议更喜欢is_a?
内置类,例如Array
. 虽然没有那么多。
希望这很有用,如果您有任何问题/反馈,请告诉我:)
推荐阅读
- perl - 将字符串转换为 CRC-32 时的不同结果
- c# - C# 如何使用 SignedXml 使用 XAdES 正确签署消息?
- javascript - 反应原生 | 将 prop 值传递给 setState
- java - 如何将活动的弱接口类型传递给单例类
- wpf - WPF:双值上的 StringFormat 无法识别自定义窗口区域设置
- python - 为什么 enable_automatic_punctuation=true 在 python 3 中给出错误
- swift4 - 如何从此 JSON 解析中获取子值?
- java - Java FX:堆栈窗格子宽度百分比(仅限 FXML)
- perl - 如何在 Perl 中创建一个完全唯一的数字集
- agent - 本地代理设置 TFS 2017 失败