目前我有这样一行代码:
[@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
将是你正在寻找的魔法。