gpt4 book ai didi

ruby-on-rails - 为什么 Awesome Print 在某些 Rails 集合对象上不起作用?

转载 作者:行者123 更新时间:2023-12-04 06:21:52 29 4
gpt4 key购买 nike

Awesome Print 通常在 Rails 中非常适合我。

但是做的时候ap Post.all在 Rails 控制台中,我只得到标准的全行输出。

是否与退回的ActiveRecord_Relation有关类或其他东西,因为当返回数组时,如 ap Post.all.each {|p| p} , Awesome Print 尽其所能。

最佳答案

为什么不直接将其转换为数组?

ap Post.all.to_a

或者你可以创建一个补丁:
alias :old_ap :ap
def ap(object, option={})
if object.class == ActiveRecord::Relation::ActiveRecord_Relation_Post
old_ap object.to_a, option
else
old_ap object, option
end
end



你是对的。也许这是与 Rails4 不兼容的问题,因为 github 上的最后一次提交是 6 个月前。这是问题所在:

awesome_print-1.2.0/lib/awesome_print/ext/active_record.rb@24
def cast_with_active_record(object, type)
cast = cast_without_active_record(object, type)
return cast if !defined?(::ActiveRecord)

if object.is_a?(::ActiveRecord::Base)
cast = :active_record_instance
elsif object.is_a?(Class) && object.ancestors.include?(::ActiveRecord::Base)
cast = :active_record_class
elsif type == :activerecord_relation #HERE the problem
cast = :array
end
cast
end

type 时,该方法会将强制转换设置为数组。是 :activerecord_relation
而在 awesome_print-1.2.0/lib/awesome_print/inspector.rb@151
def printable(object)
case object
when Array then :array
when Hash then :hash
when File then :file
when Dir then :dir
when Struct then :struct
else object.class.to_s.gsub(/:+/, "_").downcase.to_sym #HERE gets the type
end
end

但是 rails4 中的 Relation 对象类是这样的:

> Post.all.class
=> ActiveRecord::Relation::ActiveRecord_Relation_Post



所以 cast_with_active_record中的条件获取类型“activerecord_relation_activerecord_relation_post”而不是“activerecord_relation”。然后条件失败,并且没有完成任何 Actor 。

这是一个可能有效的新补丁:
module AwesomePrint
class Inspector
alias_method :old_printable, :printable
private
def printable(object)
if object.class.to_s.downcase.include?("activerecord_relation")
return :activerecord_relation
end
old_printable(object)
end
end
end

关于ruby-on-rails - 为什么 Awesome Print 在某些 Rails 集合对象上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23290040/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com