美文网首页
arel学习-1

arel学习-1

作者: SecondRocker | 来源:发表于2024-03-12 16:50 被阅读0次

一、什么是arel
arel是一个ruby实现的关系代数,用于简化复杂查询,适应多种关系数据库,目前已集成到active-record中。
二、具体用法
1 怎么运行

Order.where("id >= ?",2)
Order.where(Order.arel_table['id'].gteq(2))

生成sql:SELECT `orders`.* FROM `orders` WHERE `orders`.`id` = 2

简单示例:

    def blank_or_speical(field_name,field_val)
      field_litera = Arel::Nodes::SqlLiteral.new(field_name)
      if field_val.is_a?(Array)
        right_part =  Arel::Nodes::In.new(field_litera,field_val.map{|val| Arel::Nodes.build_quoted(val)})
      else
        right_part = Arel::Nodes::Equality.new(field_litera,Arel::Nodes.build_quoted(field_val))
      end

      Arel::Nodes::Or.new(
        Arel::Nodes::Equality.new(
          field_litera,nil
        ),
        right_part
      )
    end
  Order.where(blank_or_speical('id',[1,2,3])) #等效
  Order.where(id:[nil,1,2,3])
    SELECT "orders".* FROM "orders" WHERE EXTRACT(HOUR FROM "orders"."created_at") = 20

function 示例:

    def hour_eq(field_name,field_value)
      Arel::Nodes::Extract.new(
        Arel::Nodes::SqlLiteral.new(field_name),:hour).eq(field_value)
    end
    Order.where(hour_eq('created_at',20))
 Arel::Nodes::NamedFunction.new('cast',
              [
                Arel::Nodes::As.new(
                  Arel::Nodes::SqlLiteral.new('created_at'),
                  Arel::Nodes::SqlLiteral.new('date')
                )      
              ]
            ).to_sql   # "cast(created_at AS date)"

常用的方法

Arel::Nodes::SqlLiteral  #sql 字面量
Arel::Nodes.build_quoted  #变量
Arel::Nodes::Equality  #相等
Arel::Nodes::GreaterThan #大于
Arel::Nodes::GreaterThanOrEqual #大于等于
Arel::Nodes::LessThan #小于
Arel::Nodes::LessThanOrEqual#小于等于


Arel::Nodes::In    #  in relation

Arel::Nodes::As  # 用于 as
Arel::Nodes::NamedFunction  # 调用方法

相关文章

  • Rails 中使用 Arel 实现外连接查询

    例如有以下几个表 需求: 用户可以访问自己创建的资源 用户可以访问所属分组的资源 用户可以访问单独授权的资源 用 ...

  • 学习1

    吸引观众最简单的方法就是让他们知道在限定的时间限定的地点某人必须尝试某事,而如果失败,就会招致杀身之祸。——哈里·霍尼迪

  • 学习1

    今天下午是我过得最有意义的一个下午,我在阅览室做了两个钟头的题,并且了解广告年鉴。 哈哈,以后我想每天都这样过。

  • 学习1

    1.保护工作簿:不能增加或者删除新的工作表(审阅)2.保护工作表:可以选择设置某一特定的工作表用户可以进行的操作(...

  • 学习1

    明天与今天毫无区别。

  • 学习1

    刷了这么多的英语学习帖子,各种道理在你做之前都是废话,直到你开始实施并且在这个过程中不断补充和修正自己的方法之后才...

  • 学习1

    一、思维导图梳理架构 二、罗列知识要点:(目的:用大纲的方式罗列出重要的知识点;方便践行和实践;摘录原文;包括理念...

  • 学习+1

    [cp]一天之内买卖股票的最佳时间段是什么 (一)开盘建议进行第一次出货: 1.开盘价一般受昨日收盘价影响。若昨日...

  • 学习1

    1 2 3 1 2 3 1、2、链接 引用粗体斜体

  • 学习1

    周五的质量考试,今天安排在会议室学习,内容真多,但很重要,都是一些很有用的东西,这样很好。

网友评论

      本文标题:arel学习-1

      本文链接:https://www.haomeiwen.com/subject/zxguyctx.html