2017-10-03 1 views
0

Je veux télécharger une image à mon localhost en utilisant bijou « carrierwave », j'ai contrôleur de la peinture et des galeries comme ci-dessous le codeimages téléchargement catifs rails et erreur se

contrôleur de peinture

class PaintingsController < ApplicationController 
    def index 
    @paintings=Painting.all 
    end 
    def new 
    @painting=Painting.new 
    end 
    def show 
    @painting=Painting.find(params[:id]) 
    end 
    def create 
    #byebug 
    @painting=Painting.new(painting_params) 
    if @painting.save 
    flash[:success]="Created image in album" 
    redirect_to gallery_path(@painting) 
else 
    flash[:error]="Fail!" 
    render 'new' 
end 
    end 

    private 
    def painting_params 
    params.require(:painting).permit(:name,:gallery_id) 
    end 
end 

contrôleur Galerie

class GalleriesController < ApplicationController 
    def index 
@galleries=Gallery.all 
    end 

    def new 
@gallery=Gallery.new 
    end 

    def show 
@gallery=Gallery.find(params[:id]) 
    end 

    def create 
@gallery=Gallery.create!(gallery_params) 
redirect_to galleries_path 
    end 

    private 
    def gallery_params 
     params.require(:gallery).permit(:name) 
    end 
end 

ok puis 2 fichiers modèle: gallery.rb

class Gallery < ApplicationRecord 
    has_many :paintings 
end 

painting.rb

class Painting < ApplicationRecord 
    def access_params 
     params.require(:painting).permit(:gallery_id, :name, :image) 
    end 

belongs_to :gallery, optional: true 
mount_uploader :image, ImageUploader 
end 

Il semble everying va bien, mais je coincé à l'étape montrant l'image sur show.html.erb dans la galerie. show.html.erb

<div id="paintings"> 
    <% @gallery.paintings.each do |painting| %> 
    <div class="painting"> 
     <%= image_tag painting.image_url.to_s %> 
     <div class="name"><%= painting.name %></div> 
     <div class="actions"> 
     <%= link_to "edit", edit_painting_path(painting) %> | 
     <%= link_to "remove", painting, :confirm => 'Are you sure?', :method => :delete %> 
     </div> 
    </div> 
    <% end %> 
    <div class="clear"></div> 
</div> 

l'image ne montre en flash althought dans le contrôleur de galerie a rapporté que j'ai créé l'image, je visitai le site alors j'ai essayé s'attributes impression de peinture sur l'exposition .html.erb

<%= @gallery.name %> 
<%= @gallery.paintings.name %> 
<%= @gallery.paintings.gallery_id%> 
<%= @gallery.paintings.image%> 

Seuls le nom de la galerie et le nom de la peinture sont imprimés. deux autres méthodes a une erreur se produire.

undefined method `gallery_id' for #<ActiveRecord::Associations::CollectionProxy []> 

Je ne sais pas pourquoi la galerie ne peut accéder au nom de la peinture, mais pas d'autres two.I cherché cette erreur, mais je ne pense pas que les cas appliquer à la mienne. Quel est le problème les gars?

Répondre

0

Je trouve mon erreur! dans le contrôleur utilisateur ajouter: image à la méthode painting_params

def painting_params 
    params.require(:painting).permit(:name,:gallery_id,:image) 
    end 
0

Vos « peintures » est une collection, pas une seule image, vous devez soit itérer sur chacun d'eux ou sélectionnez la première:

<%= @gallery.paintings.first.name %> 
<%= @gallery.paintings.first.gallery_id %> 
<%= @gallery.paintings.first.image %>