Tôi đang sử dụng CarrierWave với Rails 3.1. Tôi nhận được thông báo lỗi sau khi tôi gửi biểu mẫu (cố gắng để tải lên một hình ảnh): Tin nhắnRails + CarrierWave: NoMethodError: phương thức undefined `name 'cho nil: NilClass
Lỗi:
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"}
Vấn đề là tôi không biết nơi name
này xuất phát từ và Tôi không biết biến nào là nil, vì vậy tôi không thể gỡ lỗi đúng cách (tôi đã cố gỡ lỗi nhật ký trước khi yêu cầu tại đây). Dòng 18 tương ứng với dòng @post.save
trong bộ điều khiển sau:
PostsController:
# ...
def new
@post = Post.new
@form_html_options = (params[:post_type] == "image") ? { :multipart => true } : {}
@form_partial = get_form_partial(params[:post_type])
redirect_to admin_posts_path, :alert => "You tried to create an unknown type of post..." if @form_partial.nil?
@title = "Creating a new post..."
end
def create
@post = Post.new(params[:post])
if @post.save
flash[:success] = "Post created successfully!"
redirect_to admin_post_path(@post)
else
@title = "Creating a new post..."
@form_partial = get_form_partial(params[:post][:post_type])
render 'new'
end
end
# ...
Đây file khác mà có thể là cần thiết để phát hiện các vấn đề:
Post (mô hình):
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>
Vì vậy, những gì nó thực sự đi xin vui lòng?
Mount_uploader chỉ nên là hình ảnh, phải không? Không phải image_url? – e3matheus
@ e3matheus Cảm ơn rất nhiều! –