Bienvenido a nuestra página web, en este sitio hallarás la solucíon que buscas.
Solución:
Entonces, hay algunos problemas aquí.
Primero, Paperclip’s has_attached_file
El método no es una asociación a muchos archivos. Parece que estás intentando crear un “activo” como si fuera una asociación de Rails. Todo lo que hace Paperclip es poner un par de campos en su tabla para almacenar algunos metadatos sobre el archivo y obtiene un archivo adjunto por declaración de has_attached_file
. Si desea adjuntar 5 archivos, deberá hacer algo como:
has_attached_file :asset1
has_attached_file :asset2
has_attached_file :asset3
has_attached_file :asset4
has_attached_file :asset5
O, alternativamente, puede crear otro modelo solo para almacenar los archivos. Por ejemplo:
class Listing < ActiveRecord::Base
has_many :assets
end
class Asset < ActiveRecord::Base
belongs_to :listing
has_attached_file :picture
end
De esa manera, podrías tener varios activos adjuntos a una lista (no dijiste cuál era el objeto original, así que simplemente lo llamé "lista").
En segundo lugar, no existe la carga de varios archivos en HTML (y, como tal, la file_field
el método no toma un :multiple => true
argumento. Tendrá que usar algo más allá del manejo de formularios integrado de Rails si desea cargar varios archivos. Uploadify es una opción decente (que he usado antes). Hay una gema que transformará los campos de archivo para usar uploadify (y admitirá el :multiple => true
sintaxis que desee): https://github.com/mateomurphy/uploadify_rails3/wiki. Sin embargo, no puedo dar fe de lo bueno que es.
Mi consejo sería empezar paso a paso. La carga a través de Flash to Rails puede ser un proceso complicado que implica lidiar con la metaetiqueta CSRF y otros campos en su formulario. Empiece por crear un formulario que le permita al usuario cargar un archivo y almacenarlo a través de Paperclip. Entonces tal vez rompa el has_attached_file
declaración en otro modelo para que pueda tener 1 o muchos archivos asociados con un modelo (como se muestra en el bloque de código de múltiples modelos de arriba). Luego intente agregar Uploadify u otra alternativa. Ernie Miller tiene un tutorial decente sobre la integración de Uploadify: http://erniemiller.org/2010/07/09/uploadify-and-rails-3/.
Para empezar recuerda que has_attached_file
solo puedo adjuntar uno expediente. Cuando intentas llamar @listing.assets
no hay "activos". Hay un activo. Debe crear un modelo separado usted mismo y usar las asociaciones de Rails si desea varios archivos.
La respuesta aceptada dice que no existe la carga de varios archivos en HTML.
<%= f.file_field :files, multiple: true %>
Esto le permite seleccionar varias imágenes y enviarlas como array.
Si tu tienes la relacion Dog has_many Images
y Image has_attachment :file
, haz esto para subir varias imágenes a la vez:
En tu html.erb
<%= form_for @dog, html: multipart: true do |f| %>
<%= f.file_field :files, accept: 'image/png,image/jpeg,image/gif', multiple: true %>
<%= end %>
En tu controlador
def dog_params
params.require(:dog).permit files: []
end
En tu modelo de perro
def files=(array = [])
array.each do |f|
images.create file: f
end
end
Esto supone que ya puede cargar una imagen, pero desea actualizar a varias imágenes a la vez. Tenga en cuenta que el tiempo de espera aumentará.
Para ayudar a reducir el tiempo de espera, mire mi correo en esta pregunta relacionada con la carga rápida.
A continuación, se muestra un ejemplo completo de cargas de varios archivos. Aquí un user has_many uploads
. Cada upload
modelo tiene un avatar
que representa el archivo adjunto. En definitiva: estamos creando muchos uploads
cuando creamos el user
.
Los modelos
#models/user.rb
class User < ApplicationRecord
has_many :uploads
def files=(array_of_files = [])
array_of_files.each do |f|
uploads.build(avatar: f, user: self)
end
end
end
#models/upload.rb
class Upload < ApplicationRecord
belongs_to :user
has_attached_file :avatar
validates_attachment_content_type :avatar, :content_type => ["image/png"]
end
La forma:
# views/users/_form.html.erb
<%= form_with(model: user, local: true) do |form| %>
...
<%= form.file_field :files, multiple: true %>
<%= form.submit %>
<% end %>
El controlador
class UsersController < ApplicationController
before_action :set_user, only: [:show]
def show
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
redirect_to @user, notice: 'User was successfully created.'
end
end
private
def set_user
@user = User.find(params[:id])
end
def user_params
params.require(:user).permit(:name, files: [])
end
end
Mostrar número de usuario
<%= notice %>
Name:
<%= @user.name %>
Uploads
<% @user.uploads.each do |upload| %>
<%= link_to upload.avatar.url do%>
<%= upload.avatar_file_name %>
<% end %>
<% end %>
<%= link_to 'Edit', edit_user_path(@user) %> |
<%= link_to 'Back', users_path %>
Aquí puedes ver las comentarios y valoraciones de los usuarios
Tienes la opción de sustentar nuestra investigación fijando un comentario o dejando una valoración te damos las gracias.