Uploaded image for project: 'Mongoid'
  1. Mongoid
  2. MONGOID-218

EmbeddedDocument.new(:association => nil).valid? => no method error

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

      The latest commit (http://github.com/durran/mongoid/commit/54ac923b2f1149a6cff7b30b9d09c13ad03a5dc3) has a peculiar bug. I have a Membership model which is embedded in Account and belongs_to_related User.

      In my specs to check that I'm validating presence of user I'm doing (actually through a macro method):

      m = Membership.new(:user => nil)
      m.valid?
      m.errors[:user].should include("can't be blank")

      Now this results in:

      NoMethodError: undefined method `valid?' for nil:NilClass
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/gems/activesupport-3.0.0.rc/lib/active_support/whiny_nil.rb:48:in `method_missing'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/bundler/gems/mongoid-54ac923/lib/mongoid/associations/proxy.rb:15:in `send'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/bundler/gems/mongoid-54ac923/lib/mongoid/associations/proxy.rb:15:in `method_missing'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/bundler/gems/mongoid-54ac923/lib/mongoid/validations/associated.rb:27:in `validate_each'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/bundler/gems/mongoid-54ac923/lib/mongoid/validations/associated.rb:27:in `collect'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/bundler/gems/mongoid-54ac923/lib/mongoid/validations/associated.rb:27:in `validate_each'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/gems/activemodel-3.0.0.rc/lib/active_model/validator.rb:154:in `validate'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/gems/activemodel-3.0.0.rc/lib/active_model/validator.rb:151:in `each'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/gems/activemodel-3.0.0.rc/lib/active_model/validator.rb:151:in `validate'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb:309:in `send'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb:309:in `_callback_before_127'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb:414:in `_run_validate_callbacks'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/gems/activemodel-3.0.0.rc/lib/active_model/validations.rb:201:in `run_validations!'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/gems/activemodel-3.0.0.rc/lib/active_model/validations.rb:168:in `valid?'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/bundler/gems/mongoid-54ac923/lib/mongoid/callbacks.rb:18:in `valid?'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb:408:in `_run_validation_callbacks'
      from /Users/druiden/.rvm/gems/ruby-1.8.7-p249/bundler/gems/mongoid-54ac923/lib/mongoid/callbacks.rb:18:in `valid?'
      from (irb):3>> exit

      I can only replicate the error if I explicitly set :user to nil when building the model. I can however set :user_id to nil without the error so I guess it must be connected to the association logic.

            Assignee:
            Unassigned Unassigned
            Reporter:
            dbackeus David Backeus
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: