美文网首页
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  # 调用方法
    

    相关文章

      网友评论

          本文标题:arel学习-1

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