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)