草庐IT

ruby - 为什么 AREL 在 BETWEEN 条件中添加 OR IN (NULL)?

我在模型中有一个范围:scope:daily,lambda{|day|where:post_time=>[day.beginning_of_day()..day.end_of_day()]}:post_time在数据库中声明为不可空,但AREL坚持在生成的SQL中添加虚假的IN(NULL):SELECT``.*FROM``WHERE(``.`post_time`BETWEEN'2013-02-0500:00:00'AND'2013-02-0523:59:59'OR``.`post_time`IN(NULL))我怎样才能阻止它这样做?显然我可以再添加一个条件not_eq(nil),:po

ruby - 如何在 ARel 中执行完全连接?

假设我有两个表TableA和TableB通过连接表TableABJoin建立多对多关系。我想使用ARel3生成一个查询,该查询执行TableA和TableB的完全连接。我想生成的查询应该是这样的:SELECTa.id,b.codeFROMTableAasa,TableBasb这导致表A和B的完全连接。在不编写显式sql字符串的情况下,我能得到的最接近的方法是破解外部连接:part_a=TableA.arel_tablepart_b=TableB.arel_tablequery=part_a.join(part_b,Arel::Nodes::OuterJoin).on('1=1').pr

ruby-on-rails - 如何在 Arel 中对连接列进行类型转换

在我的postgres数据库上,我有一个使用UUID的主键。下面的示例设置classVisit#primarykeyid:uuidhas_many:connections,as::connectablehas_many:payments,through::connectionsendclassConnection#(polymorphicclassjoiningvisitandpayment)#columnsconnectable_type(string),connectable_id(string)belongs_to:paymentsbelongs_to:connectable,p

ruby-on-rails - #<Arel::Nodes::SqlLiteral> 没有方法错误 'map'

我有以下示例查询:source="(SELECTDISTINCTsource.*FROM(SELECT*FROMitems)ASsource)ASitems"items=Item.select("items.*").from(source).includes([:images])pitems#[#,#]然而运行:pitems.countNoMethodError:undefinedmethodmap'forArel::Nodes::SqlLiteral`的结果我很欣赏这个查询很愚蠢,但是非简化查询有点太复杂而无法复制,这是我能创建的最小的崩溃版本。有什么想法吗?

sql - Rails ActiveRecord Arels : Unsupported argument type: String. 改为构造一个 Arel 节点

我正在使用Arels创建查询。在此查询中,我使用了generate_series函数。这是我的代码:defgenerate_seriesArel::Nodes::NamedFunction.new('GENERATE_SERIES',[start_date,end_day,'1day'])enddefstart_dateArel::Nodes::SqlLiteral.new(当我尝试通过generate_series.to_sql进行测试时。我遇到异常:Arel::Visitors::UnsupportedVisitError:Unsupportedargumenttype:Strin

ruby - 类型错误:无法访问 Arel::Nodes::Union

我正在对我的domain表的两个子集执行并集,其中cnt是局部变量,使用arel2.0.9和squeel0.8.5作为查询接口(interface)。defblacntDomain.group{some_id}.select{`*`}.select{count(`*`).as(`cnt`)}.having{`cnt`>=cnt}end现在,当构建两个调用的联合时,说cnt(1).union(cnt(1))我得到一个Arel::Nodes::Union实例。我如何使用这个关系来实际得到我的结果?调用#each会产生完全相同的Arel::Nodes::Union引用,而#to_sql会导致

sql - 在 ActiveRecord/Arel (Rails 4) 中进行联合交集的有效方法?

我正在尝试构建一个涉及两个联合的交集的非常复杂的ActiveRecord查询。我的解决方案有效,但生成的SQL中有很多冗余。有没有更有效的方法?在我的宇宙中有人、猫、狗、书籍和相册。(这是实际模型设置的玩具版本,它涉及更复杂的关联,因此甚至更丑陋的SQL。)classPerson我想检索所有拥有1)一只名叫Wallace的宠物和2)1996年发行的书或专辑的名为Jones的人。我希望能够像这样构建查询:Person.named("Jones").with_pet_named("Wallace").with_book_or_album_released_in(1996)“命名琼斯”部分很

ruby-on-rails - Arel `between` 以其他列为范围

似乎Arel的Between谓词只能与范围一起使用,例如between(1.day.ago.time..Time.current)有谁知道将它与其他列一起使用的方法吗?喜欢between(table[:since]..table[:till])(最后一个不起作用,但它显示了一个想法)。最后我要columnBETWEENtable.sinceANDtable.till 最佳答案 要生成table.fieldBETWEENanother_table.fromANDanother_table.to使用以下代码:Arel::Nodes::B

sql - Arel 中的 SQL WITH RECURSIVE 等价物

我有以下SQL,它使用WITHRECURSIVE递归获取记录的所有父项。在阿雷尔,这相当于什么?table_name=self.class.table_namearel_table=self.class.arel_tablesql= 最佳答案 在查看了@cschroed向我指出的测试后,我能够将我的原始SQL重构为:deflineagehierarchy=Arel::Table.new:hierarchyrecursive_table=Arel::Table.new(table_name).alias:recursiveselect

ruby-on-rails - 有什么方法可以使用 AREL 进行自定义关联吗?

modelPost#ActiveRecordassociationshavetonsofoptionsthatlet#youdojustaboutanythinglike:has_many:commentshas_many:spam_comments,:conditions=>['spammy=?',true]#InRails3,namedscopesareultra-elegant,andletyoudothingslike:scope:with_comments,joins(:comments)end有没有什么方法可以使用AREL或其他更精简的语法来像命名范围一样优雅地定义自定义关