2014-02-16 74 views
0

當我調用模型attributes。它說:undefined method,爲attributeeach_with_index不工作的一個數組導軌

控制器

@user_contact_query=Usercontact.select("*") 
@available_contacts_array=Array.new 
@user_contact_query.each do |variable| 
    @user_query=User.find(:all,:conditions => ["id = ?",variable.relator_id]) 
    @available_contacts_array.push(@user_query) 
end 

查看

<% @available_contacts_array.each_with_index do |variable, index| %> 
    <%= variable.email %> 
<% end %> 

回答

-1

你爲什麼不做到這?

控制器的助手

@array = Usercontact.select("*").map do| variable | 
    User.find(:all,:conditions => [ "id = ?",variable.relator_id ]) 
end 

視圖的助手

@array.each.with_index do| variable, index | 
    # ... 
end 

通則說明:在@available_contacts_array變量混合型使用you'be,大概這導致錯誤,請不要這樣做。

+0

downvoter這是爭論? –

+0

.select(「*」)是無意義的,應使用User.find(id)而不是User.find(:all,:conditions ...),並且您的each_with_index調用包含錯字,即不起作用。我甚至不會開始格式化... –

+0

@TanelSuurhans這是錯字?我不知道作者想用'select(「*」)'說什麼。所以我只是複製了代碼。 –

0

首先請發佈您的完整錯誤信息。儘管沒有看到錯誤,我可以肯定地告訴你這個問題是由你在一個無對象上調用方法引起的,也就是說你認爲一個值實際上並不存在。

除此之外,你真的應該更加關心你的代碼。你現在的代碼簡直太可怕了。這是你的代碼的等效:

@available = [] 

UserContact.find_each do |contact| 
    @available << User.find(contact.relator_id) 
end 

另一種方法是使用#inject

@available = UserContact.all.inject([]) do |list, contact| 
    list << User.find(contact.relator_id) 
    list 
end 

而最好的解決辦法是這裏實際上使用ActiveRecord關聯設定。

P.S你的代碼無論如何沒有什麼意義。爲什麼要將用戶聯繫人和用戶都放入該列表中?

+0

對不起,我正在嘗試一些東西並將其發佈到此處,而無需撤消更改 – user2749265

1

嘛,一步一步,因爲這是相當糟糕的代碼:

@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

好吧,您的編輯變得簡單。當你使用:allfind時,你得到的不是一條記錄,而是一組記錄(即使我們只有一條)。你可以這樣做:

User.find(variable.relator_id) 

然後,它會找到一個單一的記錄,並推動它在數組中。我猜是你期望它做的。

Rails會有更好的方法來做到這一點,但這需要正確定義模型,使用relator_id看起來不太可能。

+0

感謝您的回答,我犯了一個錯誤,我編輯了問題 – user2749265