2017-09-29 3 views
0

Je suis usign Rails 5.1 et carrierwave 1.1.0.rails 5 onde porteuse en association polymorphique cache de méthode non défini

Dans mon association fotos appartient à prendas.

Voici mes modèles:

class Prenda < ApplicationRecord 

has_many :fotos, inverse_of: :prenda, dependent: :destroy 
accepts_nested_attributes_for :fotos 

validates :.... 

end 

le modèle Photos:

class Foto < ApplicationRecord 
mount_uploader :file, FileUploader 

belongs_to :prenda, inverse_of: :fotos 

validates :file, presence: true, file_size: { less_than: 1.megabytes } 

end 

Et ses contrôleurs:

class PrendasController < ApplicationController 

before_action :authenticate_user!, only: [:new, :create, :edit, :update, :destroy] 

def index 

    @prendas = Prenda.all 

end 

def show 

    @prenda = Prenda.find(params[:id]) 

    @fotos = @prenda.fotos.all 

end 

def new 

    @prenda = Prenda.new 

    @foto = @prenda.fotos.build 

end 

......... 

private 

    def prenda_params 

     params.require(:prenda).permit(:titulo, :tipo, fotos_attributes: [:file, :file_cache]) 

    end 

end 

......

class FotosController < ApplicationController 

def index 

    @fotos = Foto.all 

end 


def show 

end 

def new 

    @foto = Foto.new 

end 

.......... 

private 

    def foto_params 

    params.require(:foto).permit(:file, :file_cache) 

    end 

end 

Et la forme:

%= bootstrap_form_for @prenda do |f| %> 
    <% if @prenda.errors.any? %> 
    <%= f.alert_message "Favor correjir los errores debajo." %> 
    <% end %> 

    <p> 
    <%= f.label :titulo, 'Titulo' %><br> 
    <%= f.text_field :titulo %> 
    </p> 

    <p> 
    <%= f.label :tipo, 'Tipo' %><br> 
    <%= f.text_field :tipo %> 
    </p> 

    <p> 
    <strong>Fotos:</strong> 
    <% if @fotos %> 
     <% @fotos.each do |foto| %> 
     <%= image_tag foto.file.thumb.url %> 
     <% end %> 
    <% end %> 
    </p> 

    <p> 
    <%= f.label :file, 'Agregar Imágen' %><br> 
    <%= f.file_field :file %> 
    <%= f.hidden_field :file_cache %> 
    </p> 

    <p> <%= f.submit "Guardar", class: "btn btn-primary"%> </p> 
<% end %> 

Dans ce scénario I'am obtenir l'erreur:

NoMethodError dans Prendas # nouveau

Afficher/home/mateo/Tienda/app/views/prendas/_form.html.erb où la ligne n ° 55 soulevé:

méthode non définie de file_cache » pour #Prenda: 0x00000003a795b0

S'il vous plaît aider !.

Qu'est-ce que je fais mal?

Je vois le message d'erreur est pour l'objet parent "Prenda" qui n'a pas "fotos ou fichiers" mais, comment devrais-je instancier le @foto construit dans le PrendasController dans le formulaire?

Merci, Mateo.

Répondre

0

fichier est et sur le terrain du modèle Foto et son soumis par attributs imbriqués donc je pense que vous devriez utiliser:

<p> 
    <%f.fields_for fotos_attributes do |foto| %> 
    <%= foto.label :file, 'Agregar Imágen' %><br> 
    <%= foto.file_field :file %> 
    <%= foto.hidden_field :file_cache %> 
    <%end%> 
</p> 

et il n'y a pas besoin de construire @foto = @prenda.fotos.build cela. vous pouvez essayer ceci. et l'erreur apparaît à la ligne 55, alors pourriez-vous s'il vous plaît montrer le code de la ligne 55?

s'il vous plaît followup ce tutoriel tut-1 et tut-2

merci.

+0

Merci Anand pour votre explication et les tutoriels. Cela résout mon problème. – Mateo

+0

Ma ligne 55 était: <% = f.hidden_field: file_cache%> Il appartient au bloc:

<% = f.label: fichier,% 'Agregar Imágen'>
<% = f.file_field: fichier %> <% = f.hidden_field: file_cache%>

Mateo

+0

J'ai un autre problème maintenant. Après la mise à jour du paquet, je ne peux pas mettre les rails en étoile. Je reçois l'erreur: .... => Démarrage Puma => Rails 5.1.4 application commençant en développement => Exécutez 'rails server -h' pour plus d'options de démarrage Quitter /var/lib/gems/2.4.0/gems/carrierwave-1.2.0/lib/carrierwave.rb: 45: dans 'block dans ': méthode non définie' include?' pour: es: Symbol (NoMethodError) Je pense que c'est quelque chose en relation avec mon internationalisation espagnole (: es: Symbol). C'était ok jusqu'à maintenant. Si je ne peux pas le résoudre bientôt, il se peut que j'ouvre un autre problème ici. Merci Anand (Pas Vishy? (Viswanathan) – Mateo