2011-01-18 2 views
1

J'ai développé un plugin dans les rails 3, qui héberge un référentiel de documents pour les modèles. Dans n'importe quel modèle, vous pouvez joindre n'importe quel nombre de documents avec des noms spécifiques. Comme.TypeError (ne peut pas convertir nil en Integer):

class Person < ActiveRecord::Base 
    attach_documents_as :job_documents 
    attach_documents_as :personal_documents 
end 

Cela fonctionnait très bien. Je sais que ça a l'air stupide, mais aujourd'hui, j'ai commencé mon projet et je l'ai trouvé mort. Je n'arrive pas à comprendre pourquoi cela arrive. J'ai beaucoup essayé de comprendre, mais pas de chance. Les nouveaux formulaires et les mises à jour s'affichent bien, mais chaque fois que nous créons ou mettons à jour, cela génère une erreur.

Il donne une erreur majeure:

TypeError (can't convert nil into Integer): 

J'ai essayé de le déboguer, mais il génère l'erreur avant d'entrer dans la méthode mise à jour ou créer du contrôleur.

et erreur complète journal est:

Error during failsafe response: ActionView::Template::Error 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.3/lib/active_support/whiny_nil.rb:48:in `method_missing' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.3/lib/action_dispatch/http/parameters.rb:10:in `parameters' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.3/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb:3:in `__home_likewise_open____________nazar_hussain__rvm_gems_ruby_______p__gems_actionpack_______lib_action_dispatch_middleware_templates_rescues_diagnostics_erb__205668074_102092250__741834326' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.3/lib/action_view/template.rb:135:in `block in render' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.3/lib/active_support/notifications.rb:54:in `instrument' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.3/lib/action_view/template.rb:127:in `render' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.3/lib/action_view/render/rendering.rb:59:in `block in _render_template' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.3/lib/active_support/notifications.rb:52:in `block in instrument' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.3/lib/active_support/notifications/instrumenter.rb:21:in `instrument' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.3/lib/active_support/notifications.rb:52:in `instrument' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.3/lib/action_view/render/rendering.rb:56:in `_render_template' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.3/lib/action_view/render/rendering.rb:26:in `render' 
nazar.hussain/osd/development/atlantis/vendor/plugins/active_scaffold/lib/extensions/action_view_rendering.rb:86:in `render_with_active_scaffold' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.3/lib/action_dispatch/middleware/show_exceptions.rb:88:in `rescue_action_locally' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.3/lib/action_dispatch/middleware/show_exceptions.rb:68:in `render_exception' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.3/lib/action_dispatch/middleware/show_exceptions.rb:59:in `rescue in call' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.3/lib/action_dispatch/middleware/show_exceptions.rb:46:in `call' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/rack/logger.rb:13:in `call' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/rack-1.2.1/lib/rack/runtime.rb:17:in `call' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.3/lib/active_support/cache/strategy/local_cache.rb:72:in `call' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/rack-1.2.1/lib/rack/lock.rb:11:in `block in call' 
     <internal:prelude>:10:in `synchronize' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/rack-1.2.1/lib/rack/lock.rb:11:in `call' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.3/lib/action_dispatch/middleware/static.rb:30:in `call' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/application.rb:168:in `call' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/application.rb:77:in `method_missing' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/rack/log_tailer.rb:14:in `call' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/rack-1.2.1/lib/rack/content_length.rb:13:in `call' 
nazar.hussain/.rvm/gems/ruby-1.9.2-p0/gems/rack-1.2.1/lib/rack/handler/webrick.rb:52:in `service' 
nazar.hussain/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service' 
nazar.hussain/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run' 
nazar.hussain/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread' 

espoir quelqu'un se penchera dans la question. Je serai remercié complet.

comme demandé je suis annonce le code:

Controller est simple échafaudage: avec une ligne supplémentaire. @testing.build_documents en créer et modifier

ici est le modèle

class Testing < ActiveRecord::Base 

    attach_documents_as :xdocs, :XdocsDocType 

end 

Voici le code du plugin

module AttachDocumentsAs 
    module Attacher 

    def attach_documents_as(*attachment_as) 
     @as   = nil 
     @type_model = 'AttachDocumentsAs::Models::AttachedDocumentsDefaultType' 

     attachment_as = attachment_as.to_a.flatten.compact.map(&:to_sym) 
     @as   = attachment_as.first 

     if attachment_as.size > 1 
     @type_model = attachment_as.second 
     end 

     class_inheritable_reader(@as) 

     class_inheritable_reader(:atd_as) 
     write_inheritable_attribute(:atd_as, @as) 

     class_inheritable_reader(:atd_as_type) 
     write_inheritable_attribute(:atd_as_type, @type_model) 

     if @type_model.to_s.camelize.constantize.is_a?(Class) 
     class_eval do 
      has_many @as, :as => :attachable, :class_name=>"AttachDocumentsAs::Models::AttachedDocument" 
      accepts_nested_attributes_for @as 

      include AttachDocumentsAs::Attacher::Core 
     end 
     end 

    rescue NameError 
     puts "Model with name #{"#{@as}DocType".camelize.constantize} does not exits" 
    end 

    end 
end 

module AttachDocumentsAs 
    module Attacher 
    module Core 

     def self.included(base) 
     base.send :include, AttachDocumentsAs::Attacher::Core::InstanceMethods 
     base.extend AttachDocumentsAs::Attacher::Core::ClassMethods 
     end 

     module InstanceMethods 
     def build_documents(count=1) 
      1.upto count do 
      self.send(self.send(:atd_as)).build 
      end 
      docs = self.send(self.send(:atd_as)) 
      0.upto (count-1) do |i| 
      docs[i].typeable = self.send(:atd_as_type).to_s.camelize.constantize.new 
      end 
     end 
     end 

     module ClassMethods 
     end 
    end 
    end 
end 

et enfin la forme

<%= simple_form_for(@testing, :html => {:multipart => true}) do |f| %> 
    <%= f.error_notification %> 

    <div class="inputs"> 
     <%= f.input :title %> 
    </div> 

    <div class="inputs"> 
     <%= f.simple_fields_for :xdocs do |x| %> 
      <% if x.object.new_record? %> 
       <div class="inputs"> 
       <%= x.input :attachment, :as=>:file %> 
       <%= x.input :title, :as=>:string %> 
       <%= x.input :description, :as=>:text %> 
       <%= x.input :type, :as=>:attachment_type %> 
       </div> 
      <% end %> 
     <% end %> 

    </div> 

    <div class="actions"> 
     <%= f.button :submit %> 
    </div> 
<% end %> 
+1

Êtes-vous sûr de ne pas avoir appelé un code inexistant? Pouvez-vous nous envoyer le code du contrôleur afin que nous obtenions beaucoup de clarté à ce sujet? – Kunday

+0

Mise à jour de la question avec le code. –

Répondre

2

Il est dû à attachment_fu Plugin . J'ai enlevé le plugin et tout fonctionne bien. J'installe à nouveau le plugin, le même problème se pose. Il est donc clair que attachment_fu créait des conflits.

+0

avez-vous pu résoudre le conflit? – deb

+0

Non, j'ai beaucoup essayé mais je n'arrive pas à trouver le problème exact qui a provoqué le problème. Plus tard, commuté à un trombone. –

Questions connexes