проблема с некоторым кодом управления данными в моем session_controller - PullRequest
0 голосов
/ 02 февраля 2011

пользователь может принадлежать к нескольким группам.
пользователь может сделать обзор каждой группы.
пользователи были удалены из групп без удаления отзывов. это вызывает ошибки.
когда пользователь входит в систему, я хочу удалить отзывы пользователей для групп, к которым они больше не принадлежат. вот код, который не работает:

@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 для удаления всех таких экземпляров.

Спасибо.

1 Ответ

1 голос
/ 02 февраля 2011
@user.user_reviews.destroy_all(["user_reviews.group_id NOT IN (?)", GroupMember.where(:user_id => @user.id).all.map(&:group_id)])

Эта часть может быть заменена более удобным методом @user.groups.map(&:id), если у вас есть такой метод

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

Также не стесняйтесь заменить destroy_all на delete_all, если вы этого не сделаетенужно убирать после записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...