用于从同一对象 (Ruby) 访问大量字段的快捷方式



目前我有这样一行代码:

[@organisation.name, @organisation.address, @organisation.city, @organisation.postcode, @organisation.country, @organisation.phone_number].join(', ')

这似乎没有必要冗长。

有没有办法只声明一次@organisation,并从中获取您想要的各种字段?

为了清楚起见,我把它分成了单独的行,但它可以是一行。

fields = [:name, :address, :city, :postcode, :country, :phone_number]
values = fields.map { |field| @organisation.send(field) }
csv = values.join(', ')

send方法是你所追求的魔法。它将方法调用"发送到"对象,并返回该方法调用的结果。

如果你使用 Ruby 2.3,你可以试试这个:

@organisation.attributes.fetch_values("name", "address", "city", "postcode", "country", "phone_number").join(', ')

正如提到"发送"的答案所证明的那样,你的问题不太清楚,但根据一种解释,instance_variables将是你正在寻找的魔法。

最新更新