ruby – Rails3 Arel访问自定义类
我有一个自定义类,但我希望能够将它传递给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,如果他愿意,我会尝试实现它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |