After Find Callback Problems In 4.0.0.beta 1 - Missing Attribute Error

XMLWordPrintableJSON

    • Type: Task
    • Resolution: Done
    • 12_01_17
    • Affects Version/s: None
    • Component/s: None
    • None
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      I have tests that are now failing when using after_find callbacks in 4.0.0.beta1 (which were passing in 4.0.0.alpha1). Not sure exactly why but I have a Mongoid BaseEvent

      Model with the following callback:

      after_find :unpublish_if_expired

      def unpublish_if_expired
      if persisted? && publish && end_date_time
      if end_date_time.to_date < (Date.today + 1.day)
      self.set(publish: false, expired: true)
      end
      end
      end

      The test stack trace is below:

      mongo seed data IMPORTED
      ERROR (0:00:14.406) test_0002_upon publish for a weekly recurring event recurring events are created
      Missing attribute: 'publish'.
      @ /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/attributes.rb:95:in `read_attribute'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/fields.rb:409:in `block (2 levels) in create_field_getter'
      app/models/base_event.rb:131:in `unpublish_if_expired'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:375:in `run*2708368292953340410*find_callbacks'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:80:in `run_callbacks'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/interceptable.rb:138:in `run_callbacks'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/document.rb:316:in `instantiate'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/factory.rb:44:in `from_db'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/contextual/mongo.rb:647:in `yield_document'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/contextual/mongo.rb:123:in `block in each'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/moped-2.0.0.beta6/lib/moped/cursor.rb:28:in `block in each'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/moped-2.0.0.beta6/lib/moped/cursor.rb:28:in `each'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/moped-2.0.0.beta6/lib/moped/cursor.rb:28:in `each'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/moped-2.0.0.beta6/lib/moped/query.rb:77:in `each'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/contextual/mongo.rb:122:in `each'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/contextual.rb:20:in `each'
      app/models/concerns/geotaggable.rb:131:in `to_a'
      app/models/concerns/geotaggable.rb:131:in `block in geosearch'
      app/models/concerns/geotaggable.rb:124:in `each'
      app/models/concerns/geotaggable.rb:124:in `geosearch'
      app/models/concerns/geotaggable.rb:98:in `set_destination'
      app/models/base_event.rb:67:in `update_destination'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:397:in `run*2708368292953340410*save_callbacks'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:80:in `run_callbacks'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/interceptable.rb:138:in `run_callbacks'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/persistable/creatable.rb:115:in `prepare_insert'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/persistable/creatable.rb:23:in `insert'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/persistable/savable.rb:23:in `save'
      /Users/w2ddev/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/mongoid-4.0.0.beta1/lib/mongoid/relations/many.rb:47:in `create'
      test/models/event_test.rb:114:in `block in <class:EventTest>'

      Debug Output!

      From: /Users/w2ddev/Development/what2do.asia/app/models/base_event.rb @ line 131 BaseEvent#unpublish_if_expired:

      130: def unpublish_if_expired
      => 131: binding.pry
      132: if persisted? && publish && end_date_time
      133: if end_date_time.to_date < (Date.today + 1.day)
      134: self.set(publish: false, expired: true)
      135: end
      136: end
      137: end

      [1] pry(#<BaseEvent>)> self
      => #<BaseEvent _id: 52ef24d464626b74603a0000, c_at(created_at): nil, u_at(updated_at): nil, geo: nil, zoom: nil, box: nil, poly: nil, visits_data: nil, impressions_data: nil, listing_id: nil, event_category_id: nil, country_id: nil, region_id: nil, area_id: nil, mail_shares_count: nil, fb_shares_count: nil, start_date_time: nil, end_date_time: nil, weekly_recurring: nil, recurring_freq: nil, event_slug: nil, expired: nil, _slugs: nil, _keywords: nil, _type: "BaseEvent", name: nil, description: nil, ticket_uri: nil, publish: nil>
      [2] pry(#<BaseEvent>)> self.reload

      From: /Users/w2ddev/Development/what2do.asia/app/models/base_event.rb @ line 131 BaseEvent#unpublish_if_expired:

      130: def unpublish_if_expired
      => 131: binding.pry
      132: if persisted? && publish && end_date_time
      133: if end_date_time.to_date < (Date.today + 1.day)
      134: self.set(publish: false, expired: true)
      135: end
      136: end
      137: end

      [1] pry(#<BaseEvent>)> self
      => #<BaseEvent _id: 52ef24d464626b74603a0000, c_at(created_at): 2014-02-03 05:10:45 UTC, u_at(updated_at): 2014-02-03 05:10:45 UTC, geo: [115.172933, -8.711895], zoom: 4, box: [[92.03090948491251, -29.76855487958732], [149.1598157349125, 21.038999620781567]], poly: [], visits_data: {}, impressions_data: {}, listing_id: BSON::ObjectId('52ef24cc64626b7460070000'), event_category_id: BSON::ObjectId('521d330369b27dacc4000003'), country_id: BSON::ObjectId('50139c3a9a4b7ce00100016d'), region_id: BSON::ObjectId('50139c3a9a4b7ce00100016e'), area_id: BSON::ObjectId('50139c3a9a4b7ce001000171'), mail_shares_count: 0, fb_shares_count: 0, start_date_time: 2014-03-17 21:00:00 UTC, end_date_time: 2014-03-17 22:00:00 UTC, weekly_recurring: false, recurring_freq: 7, event_slug:

      {"en"=>"Admin Listing Pte Bingo Night 17 3 14"}

      , expired: false, _slugs:

      {"en"=>["admin-listing-pte-bingo-night-17-3-14"]}

      , _keywords: ["admin", "amal", "bingo", "charity", "listing", "night", "pte"], _type: "BaseEvent", name:

      {"en"=>"Bingo Night", "id"=>"Bingo Night"}

      , description:

      {"en"=>"A wonderful night of bingo under the stars"}

      , ticket_uri: nil, publish: false>
      [2] pry(#<BaseEve

      Above is debugger output from my tests - It would appear that the after find callback is not loading any model attributes or being triggered before attributes are loaded. I checked the change log and don't see any reason in terms of changes why this fails, is there something I am missing here or is this a possible bug?

      If you need more info let me know, not sure whether this has any relevance but this is an STI Model.

            Assignee:
            Unassigned
            Reporter:
            dbkbali
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: