2011-05-24 27 views
1

用下面的解決方案進行更新會產生新的錯誤。Rails 3 noob - 填充數組的難度

用戶邀請他人審閱他們的工作。爲了跟蹤這個,邀請表具有reviewer_id和reviewee_id字段。該模型包含:

belongs_to :user 
has_many :users 

要顯示所有邀請的用戶,我們首先得到所有的邀請:

@invitations = Invitation.where("reviewee_id = ?", current_user.id).select(:reviewer_id).order("updated_at") 

然後我們得到了所有誰被邀請的用戶(這部分是錯的)

@reviewers = [] 
@invitations.each do |i| 
    @reviewers << User.where("id = ?", i.reviewer_id) 
end 

該電流溶液產生以下:

undefined method `first_name' for []:ActiveRecord::Relation 

我做了下面的代碼測試,看看是什麼@reviewers:

<% @reviewers.each do |r| %> 
    <%= r.id %><br> 
<% end %> 

,而不是返回它返回的id:

2173491700 
2173491200 
2173490540 

所以數組是沒有得到適當的填充。

非常感謝您的幫助和對特定代碼的感激。

回答

2

你想收集所有的ID,然後將它們傳遞給where

reviewer_ids = @invitations.collect { |i| i.reviewer_id } 
@reviewers = User.where(:id => reviewer_ids) 

這會抓住所有審閱者在單個數據庫調用中。

+0

謝謝!我得到以下錯誤,「Mysql2 ::錯誤:操作數應該包含1列:選擇'用戶'*從'用戶'在哪裏(id = 23,24,25)」 – Jay 2011-05-24 12:44:19

+2

@Jay - 你應該做的:'@reviewers = User.where(:id => reviewer_ids)' – Mischa 2011-05-24 12:51:42

+0

現在它出現零。啊。感謝你的幫助。 – Jay 2011-05-24 13:12:17

1

執行以下操作以獲取審稿:

@reviewers = [] 
@invitations.each do |i| 
    @reviewers << User.where("id = ?", i.reviewer_id) 
end 

的< <添加元素的數組。而且,在迭代之前,我們創建一個數組。

+0

謝謝。我正在使用您的解決方案。我得到的錯誤現在是我的文章的一部分。 – Jay 2011-05-24 13:35:06