嘛,一步一步,因为这是相当糟糕的代码:
@user_contact_query = Usercontact.select("*")
这里选择部分是有点怪怪的,我会用.all
。否则这里没有问题。
@available_contacts_array = Array.new
因为在下一行中您总是指定一个数组,所以不需要在这里初始化这个变量,您可以忽略该行。 (大多数Ruby程序员会用[]
初始化在大多数情况下,空数组)
@available_contacts_array = @user_contact_query.to_a
假设我们得到了一些记录,从查询回来,我们现在应该有与用户接触对象的数组。就我所了解的情况而言,简单的.all
也会产生类似的效果。但假设Usercontact有email
这很好,你期望它。
@user_contact_query.each do |variable|
@user_query = User.find(:all, :conditions => ["id = ?", variable.relator_id])
@available_contacts_array.push(@user_query)
end
现在,如果我得到这个权利,你要做的就是去通过你找到的所有Usercontacts,找到每一个与之相关的(可能不止一个)用户,然后在Usercontacts的数组的末尾附上结果。因此,您在该阵列中混合了用户和用户联系人。 (如果两者都有电子邮件,这仍然适用于你的观点,因为感谢鸭子打字Ruby不会在意,但最有可能的其中之一是缺少email
)。此外,如果找到多个用户,则会推送一个用户数组。而且肯定有一个数组没有email
。
好吧,您的编辑变得简单。当你使用:all
和find
时,你得到的不是一条记录,而是一组记录(即使我们只有一条)。你可以这样做:
User.find(variable.relator_id)
然后,它会找到一个单一的记录,并推动它在数组中。我猜是你期望它做的。
Rails会有更好的方法来做到这一点,但这需要正确定义模型,使用relator_id
看起来不太可能。
downvoter这是争论? –
.select(“*”)是无意义的,应使用User.find(id)而不是User.find(:all,:conditions ...),并且您的each_with_index调用包含错字,即不起作用。我甚至不会开始格式化... –
@TanelSuurhans这是错字?我不知道作者想用'select(“*”)'说什么。所以我只是复制了代码。 –