2011-01-18 2 views
1

Я разработал плагин в rails 3, который размещает репозиторий документов для моделей. В любой модели вы можете прикрепить любое количество документов с определенными именами. Подобно.TypeError (не может преобразовать nil в Integer):

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

Он работал очень хорошо. Я знаю, что это выглядит глупо, но сегодня я начинаю свой проект и считаю его мертвым. Не могу понять, почему это происходит. Пробовал много, чтобы понять, но не повезло. Новые и обновленные формы хорошо показывают, но когда мы создаем или обновляем его, возникает ошибка.

Это дает большую ошибку:

TypeError (can't convert nil into Integer): 

Я пытался отладить ее, но она генерирует ошибку перед входом в создании или обновлении метода контроллера.

и полный журнал ошибок:

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' 

Надежда кто-то будет искать в этом вопросе. Я буду полностью благодарен.

по запросу я отправляю код:

Контроллер прост эшафот: с дополнительной линией. @testing.build_documents в создания и редактирования

здесь является модель

class Testing < ActiveRecord::Base 

    attach_documents_as :xdocs, :XdocsDocType 

end 

Вот код

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 

плагин и, наконец, форма

<%= 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

Вы уверены, что не звоните в какой-то несуществующий код? Можете ли вы выслать нам код контроллера, чтобы мы получили большую ясность? – Kunday

+0

Обновлен вопрос с кодом. –

ответ

2

Это было связано с attachment_fu Plugin , Я удалил плагин, и все отлично работает. Я устанавливаю плагин снова, та же проблема возникает. Поэтому выяснилось, что attachment_fu создает некоторые конфликты.

+0

Вы могли решить конфликт? – deb

+0

Нет, я много пробовал, но не могу найти точной проблемы, вызывающей проблему. Позднее перешел на скрепку. –

Смежные вопросы