加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 除了ruby on rails之外,我将如何destroy_all或

发布时间:2020-12-16 19:24:34 所属栏目:百科 来源:网络整理
导读:我在我的网站上为我的用户消息传递线程功能使用“acts_as_tree”插件.我有一个方法可以删除选定的消息.消息实际上不会被删除.其sender_status或recipient_status列设置为1,具体取决于用户是邮件的发件人或收件人. 无论如何,如果两个用户都将这些状态设置为1,
我在我的网站上为我的用户消息传递线程功能使用“acts_as_tree”插件.我有一个方法可以删除选定的消息.消息实际上不会被删除.其sender_status或recipient_status列设置为1,具体取决于用户是邮件的发件人或收件人.

无论如何,如果两个用户都将这些状态设置为1,则最后一行确保消息行完全从数据库移出.现在这很好,只要它不是父信息被删除.如果父邮件已删除,则将无法再访问尚未选择删除的子邮件.

这是方法:

def delete_all_users_selected_messages(message_ids,user_id,parent_id)
          Message.where(:id => message_ids,:sender_id => user_id).update_all(:sender_status => 1)
          Message.where(:id => message_ids,:recipient_id => user_id).update_all(:recipient_status => 1)
          Message.delete_all(:sender_status => 1,:recipient_status => 1,:parent_id => parent_id).where("id != ?",parent_id)
        end

我正在努力做的很明显.我需要忽略父级.因此,主键等于parent_id意味着该行是父(通常,parent_id是nil,但我需要将其设置为主键值,因为其他原因,长篇故事并不重要).无论如何是否有一个SQL语句我可以添加到tat方法的最后一行的末尾?要确保它只删除行的id不等于parent_id的消息?

除非删除实际线程(引用消息表对话的MessageThreads表),否则我可以安排从不允许删除parent_id行.

在运行delete_all方法时,我怎么能这样做以便忽略这个父行?

亲切的问候

解决方法

如今在Rails 4中,您可以:
Model.where.not(attr: "something").delete_all

Model.where.not(attr: "something").destroy_all

不要忘记差异:

> destroy_all:通过调用destroy方法将相关对象与此对象一起销毁.实例化所有记录并一次销毁一个,因此对于大型数据集,这可能会很慢> delete_all:立即销毁所有关联对象,而不调用其destroy方法.不调用回调.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读