嘛,一步一步,因爲這是相當糟糕的代碼:
@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(「*」)'說什麼。所以我只是複製了代碼。 –