zendesk_api_client_rb
zendesk_api_client_rb copied to clipboard
Initialize an association/collection if it doesn't already exist?
I'm retrieving a user with sideloaded identities, adding (additional) identities, and saving the user. If the user already has some identities, it works fine. However, if they don't, and I try to add some, I get the following error:
/Users/mwp/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/zendesk_api-1.14.0/lib/zendesk_api/actions.rb:32:in `save!': undefined method `connection' for nil:NilClass (NoMethodError)
from /Users/mwp/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/zendesk_api-1.14.0/lib/zendesk_api/actions.rb:47:in `save'
from /Users/mwp/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/zendesk_api-1.14.0/lib/zendesk_api/collection.rb:366:in `block in _save'
from /Users/mwp/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/zendesk_api-1.14.0/lib/zendesk_api/collection.rb:364:in `map!'
from /Users/mwp/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/zendesk_api-1.14.0/lib/zendesk_api/collection.rb:364:in `_save'
from /Users/mwp/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/zendesk_api-1.14.0/lib/zendesk_api/collection.rb:143:in `save'
from /Users/mwp/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/zendesk_api-1.14.0/lib/zendesk_api/actions.rb:74:in `block in save_associations'
from /Users/mwp/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/zendesk_api-1.14.0/lib/zendesk_api/actions.rb:66:in `each'
from /Users/mwp/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/zendesk_api-1.14.0/lib/zendesk_api/actions.rb:66:in `save_associations'
from /Users/mwp/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/zendesk_api-1.14.0/lib/zendesk_api/actions.rb:30:in `save!'
I suspect I need to initialize the identities collection on the user if it doesn't already exist. Here's what I'm trying, but it's not working (no change in behavior, still get the NoMethodError). Any suggestions would be appreciated!
user.identities ||= ZendeskAPI::Collection.new(zendesk, ZendeskAPI::User::Identity)
# later...
user.identities << { :type => 'email', :value => '[email protected]' }
# later...
user.save!
Thank you in advance.
Something is up here but my understanding of the issue is flawed. Closing this until I can provide a more accurate test case.
Okay, let's try this again. The problem is that if you side-load an associated collection, you can't add something to that collection and save it (or its parent record). If you don't side-load (or add anything), it works fine. For example:
user = zendesk.users.find!(:id => 9728708027)
user.identities.build!(:type => 'email', :value => '[email protected]')
user.identities.save! # => true
user.save! # => true
user = zendesk.users.find!(:id => 9728708027, :include => :identities)
user.identities.build!(:type => 'email', :value => '[email protected]')
user.identities.save! # => NoMethodError
user.save! # => NoMethodError
user = zendesk.users.find!(:id => 9728708027, :include => :identities)
user.identities.save! # => true
user.save! # => true
Hopefully that helps track down the issue. I'll stop side-loading for the time being.