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

Arrays 如果对象可以是字符串或数组,如何迭代,arrays,ruby,string,Arrays,Ruby,String,我在rails模型中有一个对象,可以是字符串或数组。我认为我有以下几点: <% current_user.transaction[:account_name].each do |name| %> 如果对象是字符串,则使用每一行,如果对象是数组,则使用每一行。我不确定这是否是最好的解决办法。不管对象是数组还是字符串,有什么方法可以使其正常工作 <% if current_user.transaction[:account_name].is_a?(String) %>

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

<% current_user.transaction[:account_name].each do |name| %>
如果对象是字符串,则使用每一行,如果对象是数组,则使用每一行。我不确定这是否是最好的解决办法。不管对象是数组还是字符串,有什么方法可以使其正常工作

<% if current_user.transaction[:account_name].is_a?(String) %>
  <% current_user.transaction[:account_name].each_line do |name| %>
      balaballa
  <% end %>
<% elsif current_user.transaction[:account_name].is_a?(Array)%>
  <% current_user.transaction[:account_name].each do |name| %>
      balaballa
  <% end %>
<% end %>
请注意,如果传入数组,Arrayelement将不起任何作用,如果元素不是数组,则尝试使用array转换元素


如果元素为nil,那么它将简单地返回您[],并且不会循环任何内容。

您可以使用splat操作符。例如:

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

[*str]
# => ["hello"] 
[*arr]
# => ["hi"]
所以你的代码变成了

[*current_user.transaction[:account_name]].each do |name|

你能不能请完全阻止我修改代码我有一个对象[…]可以是字符串也可以是数组-这是你应该解决的问题。如果数组为空,你就错过了这个例子,如果数组为空,循环被调用,如果数组为空怎么办?@DineshSaini:Arraynil=[]@DineshSaini:因为Arraynil给你空数组,它应该是[].我们必须在循环中为零处理每一个错误,对吗+1为you@DineshSaini:没有。如果当前_user.transaction[:account_name]为nil,则将返回一个空数组。而不是[nil]。意思是,[]每个都不会执行。很酷,我以前不知道这个语法。请注意,如果您的对象实现了对_a的自定义,那么对_a的*调用可能会产生不期望的结果,例如,[*Time.now]
str = "hello"
arr = ["hi"]

[*str]
# => ["hello"] 
[*arr]
# => ["hi"]
[*current_user.transaction[:account_name]].each do |name|