Büroklammerfehler: Modell fehlt für 'avatar_file_name' als attr_accessor erforderlich

Ich möchte dann Paperclip verwenden, um Fotos für jedes Listing zu haben. Ich habe den Listings show.html.erb, dem Listing.rb-Modell, dem Listings_controller.rb und dem _form.html.erb-Teil den entsprechenden Code hinzugefügt.

Wenn ich versuche, ein Bild für das Listing hochzuladen, erhalte ich folgende Fehlermeldung:

Paperclip::Error in ListingsController#update
Listing model missing required attr_accessor for 'avatar_file_name'

Zeile 44 von listings_controller:

def update
 respond_to do |format|
  if @listing.update(listing_params)
    format.html { redirect_to @listing, notice: 'Listing was successfully updated.' }
    format.json { head :no_content }
  else

Ein paar Dinge, die Sie versuchen sollten: Fügen Sie dem Modell "listing.rb" Code hinzu, um die akzeptablen Bilder für den Avatar robuster zu machen. Hier ist, was mehrere Stackoverflow-Posts erwähnt haben, die dem Modell "listing.rb" hinzugefügt wurden:

validates_attachment_content_type :avatar, :content_type => %w(image/jpeg image/jpg image/png) 

Leider bekomme ich immer noch den gleichen Fehler, wenn ich ein Bild anhänge. Wenn ich kein Bild anhänge, wird mein Standardbild ordnungsgemäß geladen und die Liste wird ordnungsgemäß erstellt.

Mein Listing-Modell:

class Listing < ActiveRecord::Base
  has_attached_file :avatar, :styles => { :medium => "150x", :thumb => "100x100>" },   :default_url => "default.jpg"
  validates_attachment_content_type :avatar, :content_type => %w(image/jpeg image/jpg image/png) 
end

Meine _form.html.erb teilweise:

<%= form_for @listing, :html => { :multipart => true } do |f| %>
  <% if @listing.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@listing.errors.count, "error") %> prohibited this listing from being saved:</h2>

      <ul>
      <% @listing.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="form-group">
    <%= f.label :name %><br>
    <%= f.text_field :name, class: "form-control" %>
  </div>
  <div class="form-group">
    <%= f.label :company %><br>
    <%= f.text_field :company, class: "form-control" %>
  </div>
  <div class="form-group">
    <%= f.label :email %><br>
    <%= f.text_field :email, class: "form-control" %>
  </div>
  <div class="form-group">
    <%= f.label :phone %><br>
    <%= f.text_field :phone, class: "form-control" %>
  </div>
  <div class="form-group">
    <%= f.label :avatar %><br>
    <%= f.file_field :avatar, class: "form-control" %>
  </div>
  <div class="form-group">
    <%= f.submit class: "btn btn-primary" %>
  </div>
<% end %>

Mein listings_controller.rb controller:

 def update
    respond_to do |format|
      if @listing.update(listing_params)
        format.html { redirect_to @listing, notice: 'Listing was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @listing.errors, status: :unprocessable_entity }
      end
    end
  end
...
def listing_params
   params.require(:listing).permit(:name, :company, :email, :phone, :avatar)
end

Und meine schema.rb Datei

ActiveRecord::Schema.define(version: 20140329174335) do

  create_table "listings", force: true do |t|
    t.string   "name"
    t.string   "company"
    t.string   "email"
    t.string   "phone"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

end

BEARBEITEN: Das Hinzufügen der Konsolenausgabe nach dem Ausführen von $ rail generiert einen Avatar mit einer Liste von Büroklammern

(Ich benötige 10 Reputationspunkte, um einen Beitrag zu verfassen, damit Sie sich mit dem Link zufrieden geben könnenhttp://i.imgur.com/c8KGTa3.png)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage