从ActiveRecord :: Relation中删除“ where”子句

如何解决从ActiveRecord :: Relation中删除“ where”子句

|| 我在User上有一个方法,该方法对User应用一个复杂的select / join / order / limit并返回该关系。它还应用了“ 0”子句。如果我有那个关系对象,是否可以删除这一特定的“ 1”语句? 就像是
User.complex_stuff.without_where(:admin => true)
    

解决方法

        您可以执行类似的操作(
where_values
保存每个
where
查询;您必须对SQL进行调整以匹配系统上the5ѭ的确切输出)。请记住,这仅在您尚未实际执行查询时才有效(即,您尚未在其上调用
.all
或在视图中使用其结果):
@users = User.complex_stuff
@users.where_values.delete_if { |query| query.to_sql == \"\\\"users\\\".\\\"admin\\\" = \'t\'\" }
但是,我强烈建议您使用Emily的答案来重组
complex_stuff
方法。     ,        我知道这是一个老问题,但是由于Rails 4现在您可以执行此操作
User.complex_stuff.unscope(where: :admin)
如果您想无条件地取消对整个
where
部分的范围检查,这将删除查询的where admin部分。
User.complex_stuff.unscope(:where)
ps:感谢@Samuel指出我的错误     ,        我还没有找到一种方法来做到这一点。最好的解决方案可能是重组现有的“ 8”方法。 首先,创建一个新的方法
complex_stuff_without_admin
,该方法可以完成ѭ8everything的所有工作,但不添加
where(:admin => true)
。然后重写
complex_stuff
方法以调用
User.complex_stuff_without_admin.where(:admin => true)
。 基本上,只需从另一侧进行处理即可。在需要的地方添加,而不是在不需要的地方删除。     ,        我需要在连接两个合并范围时执行此操作(由合并范围创建的“ѭ18”),并按以下方式进行操作:“19ѭ”。 我想加入组成\'joined_scope \'的两个范围的值而没有\'where \'子句的值,以便我可以单独添加更改的\'where \'子句(改为使用\'OR \' \'AND \')。 对我来说,这进入了合并范围,就像这样:
scope :joined_scope,-> (from,to) {
  joins(self.first_scope(from,to).values[:joins])
  .joins(self.other_scope(from,to).values[:joins])
  .where(first_scope(from,to).ast.cores.last.wheres.inject{|ws,w| (ws &&= ws.and(w)) || w}
  .or(other_scope(from,to).ast.cores.last.wheres.last))
}
希望对某人有帮助     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?