如果对象可以是字符串或数组,如何迭代

Sup*_*meA 0 ruby arrays string

我在rails模型中有一个对象,可以是字符串或数组.在我看来,我有以下几点:

<% current_user.transaction[:account_name].each do |name| %>
Run Code Online (Sandbox Code Playgroud)

如果对象account_name是字符串,则会引发错误.

我想运行这样的东西:

<% current_user.transaction[:account_name].each, if sting? each_line do |name| %>
Run Code Online (Sandbox Code Playgroud)

使用each_line如果对象是一个字符串,但使用each,如果它是一个数组.我不确定这是否是最佳解决方案.无论对象是数组还是字符串,有何方法可以使其工作?

San*_*osh 6

您可以使用splat运算符.例如:

str = "hello"
arr = ["hi"]

[*str]
# => ["hello"] 
[*arr]
# => ["hi"]
Run Code Online (Sandbox Code Playgroud)

所以你的代码变成了

[*current_user.transaction[:account_name]].each do |name|
Run Code Online (Sandbox Code Playgroud)