如何使用逻辑OR而不是AND来组合2个不同的条件?注意:2个条件是作为rails范围生成的,不能轻易地直接更改为where("xory")之类的内容。简单的例子:admins=User.where(:kind=>:admin)authors=User.where(:kind=>:author)很容易应用AND条件(对于这种特殊情况是没有意义的):(admins.mergeauthors).to_sql#=>select...from...wherekind='admin'ANDkind='author'但是您如何生成具有2个不同Arel关系的以下查询?#=>select...from.
我知道它是ActiveRecord的替代品,它使用对象而不是查询。但是……为什么这样更好?创建对象/查询会“更容易”吗?它会带来更高效的SQL查询吗?它会与所有主要数据库兼容吗?-我想会的。使用存储过程会更容易/更难吗? 最佳答案 WhatexactlyisArelinRails3.0?它是关系查询运算符代数的对象模型。IunderstandthatitisareplacementforActiveRecord不,不是。它替代了字符串中手工制作的SQL查询。它是底层ActiveRecord的通用查询层,但也可以用作DataMappe
正在升级到rails4.2。实际上是从3.2-stable升级的,但一次只进步了一步。能够在Rails4.1上毫无问题地(更改后)运行该应用程序。不过,在升级到4.2后,我遇到了这个错误:uninitializedconstantArel::SqlLiteral找不到有关它的任何信息。有一些关于geokit的帖子……我们不使用。任何人对此错误及其含义有任何想法吗?更好的是-关于如何调试它的任何建议?我们的数据库使用mysql。提前致谢。 最佳答案 当我查看我的rails4.2和rails3.x项目时,我得到了同样的结果。您可能必须更
在Rails4应用程序中使用Arel,我将如何构建WHERE子句的以下部分?:stopped_at我已经有以下内容:started_at_date=Arel::Nodes::NamedFunction.new('DATE',[arel_table[:started_at]])next_day=Arel::Nodes::NamedFunction.new('DATE_ADD',[started_at_date,'INTERVAL1DAY'])conditions=arel_table[:stopped_at].lt(next_day)问题是INTERVAL1DAY被引用:>>condit
我得到了一个具有多对多关系的Order和Product模型。所以一个订单有_很多产品,每个都有不同的价格。现在我想根据订单中产品的最高价格对订单进行排序。这是我的代码:@orders=Order.group(arel_table[:id]).order(Product.arel_table[:price].maximum)它与默认的ASC顺序完美配合,但是当我将它排序为DESC顺序时,如下所示:@orders=Order.group(arel_table[:id]).order(Product.arel_table[:price].maximum.desc)我遇到这样的错误:undef
我需要一个消息列表,其中每条消息都是当前用户与其他用户之间“对话”中的最新消息。描述了相同的查询inthisquestion我目前的代码是:t1=Arel::Table.new(:messages,:as=>'t1')t2=Arel::Table.new(:messages,:as=>'t2')convs1=t1.project(t1[:receiver_user_id].as('other_user_id'),t1[:receiver_user_id].as('receiver_user_id'),t1[:sender_user_id].as('sender_user_id'),t1
我有一个查询需要返回在子查询中不匹配的结果。子查询可以返回一个空结果,所以如果子查询返回一个空集,我需要设置一个默认值(比如0),以防止IN(NULL)总是返回另一个NULL。例如SELECT*FROMexample_tableWHEREidNOTIN(subquery_that_selects_ids)subquery_that_selects_ids可以返回一组整数,即(1,2,5,6)如果子查询没有找到匹配的结果,则为空集。COALESCE在这里不起作用,因为子查询可能会返回多个结果。解决方案需要在SQLite或postgresql中运行。如何防止子查询返回空集?每个人都告诉我查
我有一个查询需要返回在子查询中不匹配的结果。子查询可以返回一个空结果,所以如果子查询返回一个空集,我需要设置一个默认值(比如0),以防止IN(NULL)总是返回另一个NULL。例如SELECT*FROMexample_tableWHEREidNOTIN(subquery_that_selects_ids)subquery_that_selects_ids可以返回一组整数,即(1,2,5,6)如果子查询没有找到匹配的结果,则为空集。COALESCE在这里不起作用,因为子查询可能会返回多个结果。解决方案需要在SQLite或postgresql中运行。如何防止子查询返回空集?每个人都告诉我查
我被困在这个问题上,当然这很容易,但我在文档中找不到解决方案。我有一些树结构和我必须使用“存在”子查询过滤的子where子句:current_node.children.as("children_nodes").where(Node.where(...).exists)Node.where.clause已经连接到children_nodes,如果我使用两个不同的模型,它就可以工作。但是我如何使用别名呢?上面的代码将导致:NoMethodError(undefinedmethod`where'for#它是如此基础,但我缺少一些东西(我对arel太陌生了)。 最
我以前这样做的地方:Foo.find_by_bar('a-value')我现在可以这样做了:Foo.where(:bar=>'a-value').limit(1).first这是推荐的吗?这是最好的方法吗?我应该继续使用“旧”方式,因为它仍然是有用的语法糖,还是我现在可以使用更好的方式来支持链接和所有其他好东西? 最佳答案 rails4:Foo.find_by(bar:'a_value',wibble:'awibblevalue') 关于ruby-on-rails-使用ActiveRec