2011-05-24 7 views
1

以下の解決策でアップデートされました。新しいエラーが発生しました。Rails 3 noob - 配列への移植が難しい

ユーザーは他のユーザーが自分の仕事をレビューするように招待します。これを追跡するために、招待状テーブルは、reviewer_idおよびreviewee_idフィールドを有する。モデルが含まれています

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

その後、我々は、招待されたすべてのユーザーを取得:(この部分は間違っている)

belongs_to :user 
has_many :users 

は、我々は最初にすべての招待状を取得するユーザーのすべての招待状を表示するには

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

この現在のソリューションには、以下を生成します。

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

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

代わりに、それは返さidを返す:

2173491700 
2173491200 
2173490540 

だから、配列が適切に読み込ま取得されていない

私は@reviewersであるかを確認するには、次のコードでテストを行いました。

私はあなたの助けに感謝し、特定のコードに最も感謝しています。

答えて

2

すべてのIDを集めて、whereに渡したいとします。

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

これは、1回のデータベース呼び出しですべてのレビューアを取得します。

+0

ありがとう!私は次のエラーが表示されます: "Mysql2 :: Error:オペランドには1列が含まれています:SELECT' users'。* FROM 'users' WHERE(id = 23,24,25)" – Jay

+2

@Jay : '@reviewers = User.where(:id => reviewer_ids)' – Mischa

+0

これはnilになります。 ugh。あなたの助けに感謝。 – Jay

1

は査読取得するには次の操作を行います

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

< <を配列に要素を追加します。そして、反復の前に配列を作成します。

+0

ありがとうございました。私はあなたのソリューションを使用しています。私が得ているエラーは、今では私のポストの一部です。 – Jay

関連する問題