I am using CarrierWave with Rails 3.1. When submitting a form (attempt to upload an image), the following error message appears:
Error message:
ActiveRecord::StatementInvalid in Admin::PostsController#create NoMethodError: undefined method `name' for nil:NilClass: INSERT INTO "posts" ("body", "created_at", "draft", "image", "post_type", "title", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?) Rails.root: /Users/aziz/Sandbox/ruby/rails/Tumblelog Application Trace | Framework Trace | Full Trace app/controllers/admin/posts_controller.rb:18:in `create' Request Parameters: {"utf8"=>"β", "authenticity_token"=>"za+zNRDGNCcujnCmO726cWCo2ze1rgaXv5bL17JGaek=", "post"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x000001014aeff0 @original_filename="AzizLight.jpeg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"post[image]\"; filename=\"AzizLight.jpeg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:/var/folders/ky/2ddtbt0d7k1g__2ctr8njcfc0000gn/T/RackMultipart20110918-21704-hp2ajt>>, "draft"=>"0", "user_id"=>"2", "post_type"=>"image"}, "commit"=>"Post"}
The problem is that I donβt know where this name comes from, and I donβt know which variable is nil , so I canβt debug correctly (I tried to debug the log before asking here). Line 18 corresponds to the line @post.save in the following controller:
PostsController:
There may be other files that may be needed to identify the problem:
Message (model):
attr_accessible :title, :body, :user_id, :draft, :post_type, :image belongs_to :user mount_uploader :image_url, ImageUploader
ImageUploader:
class ImageUploader < CarrierWave::Uploader::Base include CarrierWave::RMagick storage :fog def extension_white_list %w(jpg jpeg gif png) end end
new.html.erb:
<h1><%= @title %></h1> <%= form_for @post, :url => admin_posts_path, :html => @form_html_options do |f| %> <%= render 'form', :f => f %> <% end %>
_form.html.erb:
<%= render 'error_messages' %> <%= render @form_partial, :f => f %> <p class="drop-down"> <%= f.label :draft, 'Status' %> <%= f.select(:draft, options_for_select([["Published", 0], ["Draft", 1]], (@post.new_record? ? 0: @post.draft))) %> </p> <%= f.hidden_field :user_id, :value => @post.user_id || current_user.id %> <%= f.hidden_field :post_type, :value => @post.post_type || params[:post_type] %> <p class="button"><%= f.submit "Post", :disable_with => 'Posting...' %></p>
_image_form.html.erb ( @form_partial ):
<p><%= f.file_field :image %></p>
So what is this happening?