2016-04-09 11 views
0

Ich bekomme diese Fehlermeldung:undefiniert avatar Methode von Carrierwave in RoR Anwendung

Completed 500 Internal Server Error in 5ms (ActiveRecord: 0.0ms) 

NoMethodError (undefined method `avatar=' for #<User::ActiveRecord_Relation:0x007f87e4c304d8>): 
    app/controllers/api/v1/user_controller.rb:10:in `upload' 

Modell:

class User < ActiveRecord::Base 
    acts_as_token_authenticatable 

    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, :confirmable 

    mount_uploader :avatar, AvatarUploader 

    validates_presence_of :avatar 
    validates_integrity_of :avatar 
    validates_processing_of :avatar 
end 

Controller:

module Api 
    module V1 
    class UserController < ApplicationController 
     before_action :set_user, only: [:show, :update, :destroy] 
     #before_filter :authenticate_user_from_token! 

     def upload 
     puts "here => " + params[:user][:email].to_s 
     @user = User.where(email: params[:user][:email]) 
     @user.avatar = params[:user][:file] 
     @user.save! 
     p @user.avatar.url # => '/url/to/file.png' 
     p @user.avatar.current_path # => 'path/to/file.png' 
     p @user.avatar_identifier # => 'file.png' 
     end 
... 

environment.rb:

# Load the Rails application. 
require File.expand_path('../application', __FILE__) 

require 'carrierwave/orm/activerecord' 

# Initialize the Rails application. 
Rails.application.initialize! 

Der AvatarUploader wurde generiert und die avatar: string-Spalte wurde durch die Migrationsausführung zur users-Tabelle hinzugefügt. Ich bin mir nicht sicher, was daran falsch ist.

Zusätzliche Informationen: Ich benutze Rails: 4.2.4 Ruby 2.2.1

Vielen Dank!

Antwort

1

Der Fehler ist ziemlich informativ. Wenn Sie User.where(email: params[:user][:email]) aufrufen erhalten Sie kein User Objekt, Sie erhalten ein Objekt, das mehrere Objekte enthalten kann oder leer sein. Um eine einzelne User zu erhalten, die Sie find_by anstelle von where verwenden möchten, können Sie auf den Avatar zugreifen.

+0

Vielen Dank für das Teilen dieser Informationen das löst dieses Problem. –