2011-05-24 25 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