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.
Merci Anand pour votre explication et les tutoriels. Cela résout mon problème. – Mateo
Ma ligne 55 était: <% = f.hidden_field: file_cache%> Il appartient au bloc:
<% = f.label: fichier,% 'Agregar Imágen'>
– Mateo<% = f.file_field: fichier %> <% = f.hidden_field: file_cache%>
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