Object doesn't support #ai
dsfernandobond opened this issue · 4 comments
Not sure if it's an awesome_print issue or something my end causing it but when trying display a certain objects fields I just receive the message: (Object doesn't support #ai), for example:
Quote.new
(Object doesn't support #ai)
Any advice would be great thanks as I find awesome_print really useful.
It may be due to delegated method not being resolved, thus returning object is not an instance and awesome_print doesn't know how to handle it.
Try doing object.valid?
or object.relation.valid?
to check what is returned
I'm not sure if it's that, all cases returning true
same issue here! @mcfoton is right (in my case) belongs_to/delegate to: ... same message as above.
But, it work's just fine after i expelled gem from Gemfile, no error (ie. in console), unlike with awesome gem in Gemfile. (... nah, not exactly, just error is gone ...)
.. So, got it! The issue indeed was wrong delegate (as @mcfoton said). Make sure to use right delegate syntax, which is to set it under using/destination Class, rather then originating (wierd?)...
ie. class User is using delegated username from Profile, so in model user.rb write:
Class User < ApplicationRecord
delegate :username, to: :profile #not vice versa!
In my case this is occurring with a non-databased backed model. When trying to access foo.errors
, I get (Object doesn't support #ai)
in console.
class Foo
include ActiveModel::Model
attr_accessor :bar
def initialize(attrs = {})
super
@errors = ActiveModel::Errors.new(self)
@bar = attrs[:bar].presence
end
validate :bar_exists
def bar_exists
errors.add(:bar, 'does not exist') unless @bar.present?
end
end
Which yields:
f = Foo.new
f.valid? # => false
f.errors # => (Object doesn't support #ai)
f.errors.messages # =>
{
:bar => [
[0] "does not exist"
]
}
If I add an errors
reader method and respond with errors.to_h
it will respond with a hash and not the error, but that strips away all the other functionality of errors
so it's not a suitable solution in this instance.