我正在编写代码,将新电子邮件附加到我的Rails应用程序中的空数组中。像这样:
@users_email = Array.new
@users_email << User.find_by_id(@comment.user_id).email
@users_email << User.find_by_id(Comment.find_by_id(@parent_id).user_id).email if !@parent_id.nil?
注意:此处@comment
只是id, user_id, parent_id
的哈希,@parent_id
是任何评论的父级的ID。如在亲子层次结构中一样。
但不是在数组前面有两个项目:["ak@xyz.com", "aks@xyz.com"]
我在追加第二个项目后只得到一个项目:["aks@xyz.com"]
。
当我尝试将上面的表达式保存在Instance变量中并尝试将其附加到空数组中时,我的混乱就开始了。它的行为与预期的一样。 例如:
@users_email = Array.new
@first = User.find_by_id(@comment.user_id).email
@second = User.find_by_id(Comment.find_by_id(@parent_id).user_id).email if !@parent_id.nil?
@users_email << @first # ["ak@xyz.com"]
@users_email << @second # ["ak@xyz.com", "aks@xyz.com"]
因为这不是前一个案例。 有人可以解释一下这里发生的事情。
我错误地将"="
代替"<<"
,同时将第一个元素附加到第一个案例的数组中,然后在追加第二个元素后得到类似"ak@xyz.comaks@xyz.com"
的结果但是对于某些在我的Rails应用程序中的原因我只在return.ex中获得了第一个电子邮件ID:["ak@xyz.com"]
所以,这个问题可能与提出的问题无关。很抱歉打扰你们所有人。
答案 0 :(得分:1)
那是因为您在以下声明的末尾有!@parent_id.nil?
:
@users_email << User.find_by_id(Comment.find_by_id(@parent_id).user_id).email if !@parent_id.nil?
在第一种情况下,@parent_id
显然是nil
,因此语句永远不会执行:因此只有一个值附加到数组中。
除此之外:更喜欢using the array literal syntax(ary = []
而不是ary = Array.new
)