令人敬畏的打印通常在Rails中完美适用于我。
但是当在Rails控制台中执行ap Post.all
时,我只获得标准的全行输出。
与返回的ActiveRecord_Relation
类或其他内容有关,因为当返回一个数组时,就像在ap Post.all.each {|p| p}
中一样,Awesome Print会完成它的工作。
答案 0 :(得分:6)
为什么不将它转换为数组?
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对象类就像:
&GT; Post.all.class
=&GT; ActiveRecord的::关系:: ActiveRecord_Relation_Post
因此cast_with_active_record
中的条件得到一个类型&#34; activerecord_relation_activerecord_relation_post&#34;而不是&#34; activerecord_relation&#34;。然后条件失败,没有完成演员。
这是一个可能有用的新补丁:
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
答案 1 :(得分:0)
我正在做的是将其放在~/.pryrc
class Class
def list_all
self.all.each { |s| puts s }
end
end