简体   繁体   English

我的sessions_controller中的一些数据管理代码有麻烦

[英]trouble with some data management code in my sessions_controller

a user may belong to several groups. 一个用户可能属于几个组。
a user may do a review of each group. 用户可以对每个组进行评论。
users have been deleted from groups without deleting reviews. 用户已从组中删除,但未删除评论。 this causes errors. 这会导致错误。
when a user logs in i want to delete user reviews for groups to which they no longer belong. 当用户登录时,我想删除他们不再属于的组的用户评论。 here is the code which isn't working: 这是不起作用的代码:

@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

I would prefer not to do a mysql query to remove all such instances. 我宁愿不要执行mysql查询来删除所有此类实例。

Thanks. 谢谢。

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

This part can be replaced by a more convenient method @user.groups.map(&:id) if you have such method 如果有这样的方法,可以用更方便的方法@user.groups.map(&:id)代替此部分

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

Also feel free to replace destroy_all with delete_all if you don't need to cleanup after the records. 如果您不需要在记录后进行清理,也可以随时用delete_all替换destroy_all

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM