2011-02-02 15 views
0

ユーザーは複数のグループに所属している可能性があります。
ユーザーは各グループのレビューを行うことができます。
ユーザーはレビューを削除せずにグループから削除されました。これによりエラーが発生します。
ユーザーがログインしたときに、もはや属していないグループのユーザーレビューを削除します。私のsessions_controllerのデータ管理コードに問題があります

@user = session[:user] 
@group = session[:group] 
@urevs = UserReview.find(:all, :conditions => ["user_id = ?", @user.id]) 
unless @urevs.nil? 
    @urevs.each do |r| 
     ur = @urevs.id 
     @rv = Review.find(:first, :conditions => ["id = ?", @urevs.review_id]) 
     @gm = GroupMember.find(:first, :conditions => ["group_id = ? and user_id = ?", @rv.group_id, @user.id]) 
     if @gm.nil? 
      @dest = UserReview.find(:first, :conditions => ["id = ?", ur]) 
      @dest.destroy 
     end 
    end 
end 

私はそのようなすべてのインスタンスを削除するには、MySQLのクエリを実行しないことを好むだろう。ここで が動作していないコードです。

ありがとうございました。この部分は、より便利な方法@user.groups.map(&:id)により、あなたはこのような方法を持っている場合

GroupMember.where(:user_id => @user.id).all.map(&:group_id) 

を交換することができ

答えて

1
@user.user_reviews.destroy_all(["user_reviews.group_id NOT IN (?)", GroupMember.where(:user_id => @user.id).all.map(&:group_id)]) 

また、レコードの後に​​クリーンアップする必要がない場合はdelete_alldestroy_allを交換して自由に感じます。

関連する問題