加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – Rails3 Arel访问自定义类

发布时间:2020-12-17 03:34:52 所属栏目:百科 来源:网络整理
导读:我有一个自定义类,但我希望能够将它传递给Arel并让它解析其可查询部分. module Custom class Item attr_accessor :name def initialize(name) self.name = name end endendcustom_item = Custom::Item.new("Bill")User.where(:name = custom_item) 有什么我
我有一个自定义类,但我希望能够将它传递给Arel并让它解析其可查询部分.

module Custom
  class Item
    attr_accessor :name

    def initialize(name)
      self.name = name
    end
  end
end

custom_item = Custom::Item.new("Bill")
User.where(:name => custom_item)

有什么我可以在custom_item中定义,所以它会理解Arel想要它的名字吗?

目前我解决方法:

module Arel
  module Visitors
    class ToSql
      def visit_Custom_Item o
        "'#{o.name}'"
      end
    end
  end
end

解决方法

我认为现在不可能.让我们试着找出原因.

当您尝试将自定义对象传递给where方法User.where(:name => custom_item)时,Arel尝试调用visit_YOUR_CLASS_NAME方法(https://github.com/rails/arel/blob/master/lib/arel/visitors/visitor.rb#L15)但它失败了.然后Arel尝试调用visit_ object.class.ancestors.find {| klass | respond_to?(DISPATCH [klass],true)}但它再次失败,因为:

irb(main):001:0> class Foo
irb(main):002:1> end
=> nil
irb(main):003:0> foo = Foo.new
=> #<Foo:0x261edc0>
irb(main):004:0> foo.class.ancestors.map {|klass| p klass}
Foo
Object
Kernel
BasicObject
=> [Foo,Object,Kernel,BasicObject]

和Arel在此列表https://github.com/rails/arel/blob/master/lib/arel/visitors/to_sql.rb#L394中没有任何此名称:

alias :visit_ActiveSupport_Multibyte_Chars :quoted
alias :visit_ActiveSupport_StringInquirer  :quoted
alias :visit_BigDecimal                    :quoted
alias :visit_Class                         :quoted
alias :visit_Date                          :quoted
alias :visit_DateTime                      :quoted
alias :visit_FalseClass                    :quoted
alias :visit_Float                         :quoted
alias :visit_Hash                          :quoted
alias :visit_NilClass                      :quoted
alias :visit_String                        :quoted
alias :visit_Symbol                        :quoted
alias :visit_Time                          :quoted
alias :visit_TrueClass                     :quoted

实际上,我认为这不是一个非常有用的功能,但我已经问过Aaron Patterson,如果他愿意,我会尝试实现它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读