2012-03-06 3 views
3

Существует уже аналогичный вопрос здесь Rails + CarrierWave: NoMethodError: undefined method `name' for nil:NilClass, но решение там должно было исправить опечатку.Carrierwave NoMethodError: undefined method `name 'for nil: NilClass:

Я уже использую Rails и Carrierwave в том же проекте без проблем. Существует простой AR модель:

class Upload < ActiveRecord::Base 
    attr_accessible :title, :data_file, :caption 
    mount_uploader :upload, DataFileUploader 

    validates :title, :data_file, :presence => true 
end 

В Thers контроллер как обычно:

def create 
    @upload = Upload.new(params[:upload]) 

    if @upload.save 
    redirect_to new_admin_upload_path, :notice => t("site.successfully_created_resource") 
    else 
    render :action => 'new' 
    end 
end 

прямо вперед. При подаче формы следующее сообщение об ошибке встречается,:

ActiveRecord::StatementInvalid in Admin::UploadsController#create 

NoMethodError: undefined method `name' for nil:NilClass: INSERT INTO "uploads" ("caption",  
"created_at", "data_file", "title", "updated_at") VALUES (?, ?, ?, ?, ?) 

Я не вижу ошибки и не понимают, где название происходит от. Когда вы покидаете mount_uploader: upload, DataFileUploader в модели AR, все работает нормально.

Что здесь не так?

Большое спасибо!

+0

Попробуйте проверить эту ссылку из: http://stackoverflow.com/questions/7464536/rails-carrierwave-nomethoderror-undefined-method-name-for-nilnilclass –

+2

спасибо - но на самом деле я уже имея в виду этот пост, но он не обеспечивает решение .... – awenkhh

ответ

5

У меня была такая же ошибка, и решение было связать загрузчик с существующим полем в моей модели. Для примера исправление будет меняться от

class Upload < ActiveRecord::Base 
    attr_accessible :title, :data_file, :caption 
    mount_uploader :upload, DataFileUploader 

    validates :title, :data_file, :presence => true 
end 

в

class Upload < ActiveRecord::Base 
    attr_accessible :title, :data_file, :caption 
    mount_uploader :data_file, DataFileUploader 

    validates :title, :data_file, :presence => true 
end 

, если у вас есть data_file поле в Upload модели и не имеют поля загрузки (осматривает файл дб/schema.rb будет быть полезным).

+0

Просто у той же проблемы, это решило это отлично! Благодарю. – joshferrara

0

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

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