2016-03-19 3 views
1

Ich versuche CarrierWave zu verwenden, um Benutzer zu ermöglichen, Bilder zu. Im Moment versuche ich einfach das Bild nach dem Upload anzuzeigen, aber nachdem ich den Submit Button gedrückt habe, bekomme ich die 'undefinierte lokale Variable oder Methode' image 'für # < # < Klasse: 0x007f2179a53d30>: 0x007f2174b50238>' Fehler im Titel angezeigt .Ruby on Rails - Nameerror in Bildern # zeigen, nicht definieren lokale Variable oder Methode `Bild‘ für # <# <Klasse: 0x007f2179a53d30>: 0x007f2174b50238>

Hier ist mein images_controller:

class ImagesController < ApplicationController 
    def new 
    @image = Image.new 
    end 

    def create 
    @image = Image.new 
    if @image.save 
     redirect_to @image 
    end 
    end 

    def show 
    end 

end 

und mein image.rb (Modell):

new.html.erb (das Upload-Formular):

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

     <ul> 
     <% @image.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <div class="field"> 
    <%= f.label :image %><br> 
    <%= f.file_field :image %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

zeigen .html.erb (die Seite, die den Fehler verursacht):

<%= image_tag image.image_url %> 

Und um zu zeigen, dass die ‚Bild‘ Spalte in meinem schema.rb vorhanden ist:

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

    create_table "images", force: :cascade do |t| 
    t.string "image" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

Ehrlich gesagt habe ich keine Ahnung, was das Problem sein könnte. Laut jedem Tutorial, das ich gelesen habe, sollte image_url funktionieren, aber es findet die Methode nicht.

Kann mir jemand helfen?

+0

wo Sie Bild gespeichert werden? Sie erstellen nur neue Instanz @ Image = Image.new – LHH

+0

Ich habe @ Image.Save in meinem Controller –

+0

sind Sie Bilder lokal oder s3? – LHH

Antwort

0

Versuchen Sie den Code unten

class ImagesController < ApplicationController 
     def new 
     @image = Image.new 
     end 

     def create 
     @image = Image.new(image_params) ##assign image params here 
     if @image.save 
      redirect_to @image 
     end 
     end 

     def show 
     @image = Image.find_by_id(params[:id]) 
     end 


    private 
     def image_params 
     params.require(:image).permit(:image) 
     end 

    end 

und in show.html.erb

<%= image_tag @image.image_url %> 
+0

Perfekt! Danke vielmals! –

Verwandte Themen