2014-03-06 104 views
1

我想要做這樣的事情Rails的遍歷數組對象

@groups = Community::GroupMember.where(:member_id => current_user.id) 
     user_ids = [] 
     @groups.each do |group| 
     user_ids << @group.community_group_members.where(:group_id => group.id).pluck(:member_id) 
     end 

,但我得到的錯誤NoMethodError - 未定義的方法`community_group_members'我覺得我不是迭代@groups正確的方式我想。

+0

您是否收到任何從你的Community :: GroupMember.where(:member_id => cur rent_user.id)'電話? –

回答

2

你應該有:

user_ids << group.community_group_members.pluck(:member_id) 

group而不是@group)。這是因爲在each塊內,數組的元素由局部變量(沒有前綴)代替實例變量(前綴爲@)表示。因此@group實例變量未設置,因此評估爲nil,該方法不響應community_group_members方法。

此外,我刪除了您的where子句,因爲它是reduntant - 您已在group.community_group_members調用中執行此操作。

0
@groups = Community::GroupMember.where(:member_id => current_user.id) 
     user_ids = [] 
     @groups.each do |group| 
     user_ids << group.community_group_members.where(:group_id => group.id).pluck(:member_id) 
     end 

是否使用塊變量組而不是@group work?

0

假設你有兩個模型Community::GroupCommunity::GroupMember與各協會has_many :community_group_membersbelongs_to :community_group分別您的第一行:

@groups = Community::GroupMember.where(:member_id => current_user.id) 

返回Community::GroupMember實例的數組,即組成員,不團。

爲了讓你可以使用相關聯基團map

@group_members = Community::GroupMember.where(member_id: current_user.id) 
@groups = @group_members.map { |group_member| group_member.community_group } 

join

@groups = Community::Group.joins(:community_group_members).where(community_group_members: { member_id: current_user.id }) 

現在,您可以檢索member_id S:

user_ids = Community::GroupMember.where(group_id: @groups).pluck(:member_id)