2015-01-19 2 views
2

Я нашел подобный вопрос: NameError: uninitialized constant Article::ImageUploader when using Carrierwave on rails 4.1.5Paperclip давая NameError: неинициализированную постоянной Модель :: ImageUploader

Но я попробовал предложения там: установлен carrierwave и пачка полной И я проверил мои модели ,

Моя модель пользователя имеет:

has_one :image, :as => :assetable, :class_name => "User::Image", :dependent => :destroy 

И мои работы переименований найти, но как только я пытаюсь получить доступ мнения он разбивает этим кодом:

<%= link_to image_tag((current_user.image.nil? ? Settings.default_user_image : current_user.image.attachment.url(:thumbnail)) , :style=>'max-width:60px;', :alt=>current_user.full_name, :title=>current_user.full_name), user_path(current_user) %> 

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

Это, как я повторить вопрос на рельсы консоли:

2.1.1 :001 > u = User.new 
2.1.1 :002 > u.build_image 
NameError: uninitialized constant User::User::Image 
     from /home/aditya/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.0/lib/active_record/inheritance.rb:133:in `compute_type' 
     from /home/aditya/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.0/lib/active_record/reflection.rb:190:in `klass' 
     from /home/aditya/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.0/lib/active_record/reflection.rb:207:in `build_association' 
     from /home/aditya/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.0/lib/active_record/associations/association.rb:247:in `build_record' 
     from /home/aditya/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.0/lib/active_record/associations/singular_association.rb:29:in `build' 
     from /home/aditya/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.0/lib/active_record/associations/builder/singular_association.rb:18:in `build_image' 
     from (irb):2 
     from /home/aditya/.rvm/gems/ruby-2.1.1/gems/railties-4.1.0/lib/rails/commands/console.rb:90:in `start' 
     from /home/aditya/.rvm/gems/ruby-2.1.1/gems/railties-4.1.0/lib/rails/commands/console.rb:9:in `start' 
     from /home/aditya/.rvm/gems/ruby-2.1.1/gems/railties-4.1.0/lib/rails/commands/commands_tasks.rb:69:in `console' 
     from /home/aditya/.rvm/gems/ruby-2.1.1/gems/railties-4.1.0/lib/rails/commands/commands_tasks.rb:40:in `run_command!' 
     from /home/aditya/.rvm/gems/ruby-2.1.1/gems/railties-4.1.0/lib/rails/commands.rb:17:in `<top (required)>' 
     from bin/rails:4:in `require' 
     from bin/rails:4:in `<main>' 

Пожалуйста, помогите. Сейчас я застрял в критической точке.

Путь к файлу, в котором происходит ошибка: /demo/app/views/home/index.html.erb

класс Изображение находится в: /демо/приложение/модели/пользователь/изображения. Р.Б.

Содержание для image.rb

class User::Image < Asset 
    has_attached_file :attachment, { 
    fog_credentials: {:aws_access_key_id=>"***", :aws_secret_access_key=>"***", :provider=>"AWS"}, :fog_public=>true, :fog_directory=>"test", 

    styles: { :thumbnail => "60x60#", :profile => "165x165#" }, 
    storage: :multiple, 
    path: ":compatible_rails_root/users/files/:id/:style.:extension", 
    url: "/uploads/posts/files/:id/:style.:extension", 
    multiple_if:  lambda { |user| true }, 
    display_from_s3: lambda { |user| true } 
    } 

    validates_attachment_content_type :attachment, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"] 
end 

режим пользователя просто в /демо/приложение/модели

+0

Можете ли вы опубликовать пути к изображениям и пользовательским классам? – neo

+0

@neo обновил вопрос, с запрошенной информацией. – whizcreed

+0

После того, как вы копаетесь в код ActiveRecord, я полагаю, что существует некоторая 'NameError', когда рельсы пытаются импортировать' User :: Image'. Попытайтесь использовать 'has_one: image,: class_name =>" :: User :: Image "' (! Note leading '::' в class_name), это может дать вам лучший стек. Затем добавьте этот стек. – glyuck

ответ

0

Pro bably, ваши пространства имен неправильно, то попробуйте написать свои классы следующим образом (обратите внимание на введенный Users модуль):

# app/models/users/image.rb 
module Users 
    class Image < Asset 
    has_attached_file :attachment, { # ... 
    # .... 
    end 
end 

и просто изменить строку со ссылкой на Image класса в User классе (единственное изменение в том, что это Users::Image сейчас:

# app/models/users.rb 
class User < ActiveRecord::Base 
    has_one :image, :as => :assetable, :class_name => "Users::Image", #... 
    # ... 
end 

этот (и, возможно, один перезапуск сервера позже), и все должно быть хорошо.

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