Note that there are some explanatory texts on larger screens.

plurals
  1. POAdding :multipart => true throws Undefined Method "name" error
    primarykey
    data
    text
    <p>I'm drawing a blank on this one. Here's my problem:</p> <p><strong>Short Version</strong></p> <p>My <code>image#create</code> action is failing on the <code>image.save</code> call and throwing <code>Undefined method "name" for nil:NilClass</code>. The Image model includes a file upload via <code>paperclip</code> gem.</p> <p>The part that is throwing me: </p> <p><strong>the error only occurs when I include <code>:multipart =&gt; true</code> on the submitting form</strong></p> <p>When I take that out, the form works perfectly, except of course the image file doesn't get uploaded. See the stack trace below for details on where it fails. It looks like its hitting a nil value when trying to quote something for the INSERT statement, but I can't figure out what. My controller parameters look ok, and I checked via the logger to make sure the new <code>Image</code> instance is properly built just before it hits the save call.</p> <p><strong>Extra Details</strong></p> <p>I'll try to include all the details I can think of, ordered by importance:</p> <ul> <li><p>I'm using <a href="https://github.com/thoughtbot/paperclip" rel="nofollow">paperclip</a> and attempting to store via S3, although this problem still occurs when I completely comment out the <code>has_attached_file</code> line in my Image model.</p></li> <li><p>Image is a nested resource inside Collection, which is referenced by a slug in its <code>to_param</code> method.</p></li> <li><p>I have the basics of a multi-tenant system (aka Basecamp-style user subdomains, implemented via a central user model that scopes all the components). </p></li> </ul> <p><strong>Parameters passed to controller</strong></p> <pre><code>{"utf8"=&gt;"✓", "authenticity_token"=&gt;"JYCMky7851j5cW4ChSWUCCL/02iePf6i/QWAgR8q5tE=", "image"=&gt;{"name"=&gt;"My testerific image 2", "slug"=&gt;"my-testerific-image-2", "description"=&gt;"w", "collection_id"=&gt;"2", "sort"=&gt;"3", "picture_file_name"=&gt;#&lt;ActionDispatch::Http::UploadedFile:0x00000101b3f540 @original_filename="David's pic 005.jpeg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"image[picture_file_name]\"; filename=\"David's pic 005.jpeg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#&lt;File:/var/folders/df/mvsv5cs137gbyl8r7h428zp40000gn/T/RackMultipart20110814-64770-duz6wu&gt;&gt;}, "commit"=&gt;"Create Image", "collection_id"=&gt;"my-new-collection"} </code></pre> <p><strong>Full stack trace</strong></p> <pre><code>activesupport (3.0.9) lib/active_support/whiny_nil.rb:48:in 'method_missing' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:20:in 'block in initialize' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'yield' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'default' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'block in initialize' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'yield' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'default' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'block in initialize' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'yield' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'default' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'block in initialize' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'yield' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'default' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:22:in 'block in initialize' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:63:in 'yield' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:63:in 'default' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:63:in 'accept' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:325:in 'block in dump_ivars' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:323:in 'each' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:323:in 'dump_ivars' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:85:in 'visit_Object' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:63:in 'accept' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/visitors/yaml_tree.rb:36:in '&lt;&lt;' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych.rb:165:in 'dump' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/psych/core_ext.rb:13:in 'psych_to_yaml' activerecord (3.0.9) lib/active_record/connection_adapters/abstract/quoting.rb:34:in 'quote' activerecord (3.0.9) lib/active_record/connection_adapters/sqlite3_adapter.rb:45:in 'quote' arel (2.0.10) lib/arel/visitors/to_sql.rb:327:in 'quote' arel (2.0.10) lib/arel/visitors/to_sql.rb:70:in 'block in visit_Arel_Nodes_Values' arel (2.0.10) lib/arel/visitors/to_sql.rb:69:in 'map' arel (2.0.10) lib/arel/visitors/to_sql.rb:69:in 'visit_Arel_Nodes_Values' arel (2.0.10) lib/arel/visitors/visitor.rb:15:in 'visit' arel (2.0.10) lib/arel/visitors/to_sql.rb:59:in 'visit_Arel_Nodes_InsertStatement' arel (2.0.10) lib/arel/visitors/visitor.rb:15:in 'visit' arel (2.0.10) lib/arel/visitors/visitor.rb:5:in 'accept' arel (2.0.10) lib/arel/visitors/to_sql.rb:18:in 'block in accept' activerecord (3.0.9) lib/active_record/connection_adapters/abstract/connection_pool.rb:111:in 'with_connection' arel (2.0.10) lib/arel/visitors/to_sql.rb:16:in 'accept' arel (2.0.10) lib/arel/tree_manager.rb:20:in 'to_sql' arel (2.0.10) lib/arel/select_manager.rb:217:in 'insert' activerecord (3.0.9) lib/active_record/relation.rb:14:in 'insert' activerecord (3.0.9) lib/active_record/persistence.rb:274:in 'create' activerecord (3.0.9) lib/active_record/timestamp.rb:47:in 'create' activerecord (3.0.9) lib/active_record/callbacks.rb:277:in 'block in create' activesupport (3.0.9) lib/active_support/callbacks.rb:414:in '_run_create_callbacks' activerecord (3.0.9) lib/active_record/callbacks.rb:277:in 'create' activerecord (3.0.9) lib/active_record/persistence.rb:250:in 'create_or_update' activerecord (3.0.9) lib/active_record/callbacks.rb:273:in 'block in create_or_update' activesupport (3.0.9) lib/active_support/callbacks.rb:429:in '_run_save_callbacks' activerecord (3.0.9) lib/active_record/callbacks.rb:273:in 'create_or_update' activerecord (3.0.9) lib/active_record/persistence.rb:40:in 'save' activerecord (3.0.9) lib/active_record/validations.rb:43:in 'save' activerecord (3.0.9) lib/active_record/attribute_methods/dirty.rb:21:in 'save' activerecord (3.0.9) lib/active_record/transactions.rb:240:in 'block (2 levels) in save' activerecord (3.0.9) lib/active_record/transactions.rb:292:in 'block in with_transaction_returning_status' activerecord (3.0.9) lib/active_record/connection_adapters/abstract/database_statements.rb:139:in 'transaction' activerecord (3.0.9) lib/active_record/transactions.rb:207:in 'transaction' activerecord (3.0.9) lib/active_record/transactions.rb:290:in 'with_transaction_returning_status' activerecord (3.0.9) lib/active_record/transactions.rb:240:in 'block in save' activerecord (3.0.9) lib/active_record/transactions.rb:251:in 'rollback_active_record_state!' activerecord (3.0.9) lib/active_record/transactions.rb:239:in 'save' app/controllers/images_controller.rb:42:in 'block in create' actionpack (3.0.9) lib/action_controller/metal/mime_responds.rb:264:in 'call' actionpack (3.0.9) lib/action_controller/metal/mime_responds.rb:264:in 'retrieve_response_from_mimes' actionpack (3.0.9) lib/action_controller/metal/mime_responds.rb:191:in 'respond_to' app/controllers/images_controller.rb:40:in 'create' actionpack (3.0.9) lib/action_controller/metal/implicit_render.rb:4:in 'send_action' actionpack (3.0.9) lib/abstract_controller/base.rb:150:in 'process_action' actionpack (3.0.9) lib/action_controller/metal/rendering.rb:11:in 'process_action' actionpack (3.0.9) lib/abstract_controller/callbacks.rb:18:in 'block in process_action' activesupport (3.0.9) lib/active_support/callbacks.rb:451:in '_run__867212960703161301__process_action__2360218484576085785__callbacks' activesupport (3.0.9) lib/active_support/callbacks.rb:410:in '_run_process_action_callbacks' activesupport (3.0.9) lib/active_support/callbacks.rb:94:in 'run_callbacks' actionpack (3.0.9) lib/abstract_controller/callbacks.rb:17:in 'process_action' actionpack (3.0.9) lib/action_controller/metal/instrumentation.rb:30:in 'block in process_action' activesupport (3.0.9) lib/active_support/notifications.rb:52:in 'block in instrument' activesupport (3.0.9) lib/active_support/notifications/instrumenter.rb:21:in 'instrument' activesupport (3.0.9) lib/active_support/notifications.rb:52:in 'instrument' actionpack (3.0.9) lib/action_controller/metal/instrumentation.rb:29:in 'process_action' actionpack (3.0.9) lib/action_controller/metal/rescue.rb:17:in 'process_action' actionpack (3.0.9) lib/abstract_controller/base.rb:119:in 'process' actionpack (3.0.9) lib/abstract_controller/rendering.rb:41:in 'process' actionpack (3.0.9) lib/action_controller/metal.rb:138:in 'dispatch' actionpack (3.0.9) lib/action_controller/metal/rack_delegation.rb:14:in 'dispatch' actionpack (3.0.9) lib/action_controller/metal.rb:178:in 'block in action' actionpack (3.0.9) lib/action_dispatch/routing/route_set.rb:62:in 'call' actionpack (3.0.9) lib/action_dispatch/routing/route_set.rb:62:in 'dispatch' actionpack (3.0.9) lib/action_dispatch/routing/route_set.rb:27:in 'call' rack-mount (0.6.14) lib/rack/mount/route_set.rb:148:in 'block in call' rack-mount (0.6.14) lib/rack/mount/code_generation.rb:93:in 'block in recognize' rack-mount (0.6.14) lib/rack/mount/code_generation.rb:68:in 'optimized_each' rack-mount (0.6.14) lib/rack/mount/code_generation.rb:92:in 'recognize' rack-mount (0.6.14) lib/rack/mount/route_set.rb:139:in 'call' actionpack (3.0.9) lib/action_dispatch/routing/route_set.rb:493:in 'call' warden (1.0.5) lib/warden/manager.rb:35:in 'block in call' warden (1.0.5) lib/warden/manager.rb:34:in 'catch' warden (1.0.5) lib/warden/manager.rb:34:in 'call' actionpack (3.0.9) lib/action_dispatch/middleware/best_standards_support.rb:17:in 'call' actionpack (3.0.9) lib/action_dispatch/middleware/head.rb:14:in 'call' rack (1.2.3) lib/rack/methodoverride.rb:24:in 'call' actionpack (3.0.9) lib/action_dispatch/middleware/params_parser.rb:21:in 'call' actionpack (3.0.9) lib/action_dispatch/middleware/flash.rb:182:in 'call' actionpack (3.0.9) lib/action_dispatch/middleware/session/abstract_store.rb:149:in 'call' actionpack (3.0.9) lib/action_dispatch/middleware/cookies.rb:302:in 'call' activerecord (3.0.9) lib/active_record/query_cache.rb:32:in 'block in call' activerecord (3.0.9) lib/active_record/connection_adapters/abstract/query_cache.rb:28:in 'cache' activerecord (3.0.9) lib/active_record/query_cache.rb:12:in 'cache' activerecord (3.0.9) lib/active_record/query_cache.rb:31:in 'call' activerecord (3.0.9) lib/active_record/connection_adapters/abstract/connection_pool.rb:354:in 'call' actionpack (3.0.9) lib/action_dispatch/middleware/callbacks.rb:46:in 'block in call' activesupport (3.0.9) lib/active_support/callbacks.rb:416:in '_run_call_callbacks' actionpack (3.0.9) lib/action_dispatch/middleware/callbacks.rb:44:in 'call' rack (1.2.3) lib/rack/sendfile.rb:107:in 'call' actionpack (3.0.9) lib/action_dispatch/middleware/remote_ip.rb:48:in 'call' actionpack (3.0.9) lib/action_dispatch/middleware/show_exceptions.rb:47:in 'call' railties (3.0.9) lib/rails/rack/logger.rb:13:in 'call' rack (1.2.3) lib/rack/runtime.rb:17:in 'call' activesupport (3.0.9) lib/active_support/cache/strategy/local_cache.rb:72:in 'call' rack (1.2.3) lib/rack/lock.rb:11:in 'block in call' &lt;internal:prelude&gt;:10:in 'synchronize' rack (1.2.3) lib/rack/lock.rb:11:in 'call' actionpack (3.0.9) lib/action_dispatch/middleware/static.rb:30:in 'call' railties (3.0.9) lib/rails/application.rb:168:in 'call' railties (3.0.9) lib/rails/application.rb:77:in 'method_missing' railties (3.0.9) lib/rails/rack/log_tailer.rb:14:in 'call' rack (1.2.3) lib/rack/content_length.rb:13:in 'call' rack (1.2.3) lib/rack/handler/webrick.rb:52:in 'service' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httpserver.rb:111:in 'service' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httpserver.rb:70:in 'run' /Users/daw/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/server.rb:183:in 'block in start_thread' </code></pre> <h1>Update</h1> <p>As requested, model code:</p> <pre><code>class Image &lt; ActiveRecord::Base belongs_to :collection belongs_to :user before_save :create_slug has_attached_file :picture, #:styles =&gt; { # :thumb =&gt; '100x100&gt;', # :full =&gt; '800x800&gt;' #}, :storage =&gt; :s3, :s3_credentials =&gt; Rails.root.join( 'config', 's3.yml' ), :path =&gt; ":id/:style/:filename" def to_param self.name.parameterize end private def create_slug self.slug = self.to_param end end </code></pre> <h1>Update 2</h1> <p>I compared the <code>Image</code> instance that was built with <code>:multipart =&gt; true</code> vs without it, and confirmed the only difference is the file upload field, <code>picture_file_name</code>. Without <code>:multipart =&gt; true</code>, it a string with the filename (not surprising). With it, it is an instance of <code>ActionDispatch::Http::UploadedFile</code>. Given that the stack trace shows its failing during a <code>to_yaml</code> call, perhaps the problem lies with the <code>UploadedFile</code> instance converting to YAML?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload