1 pièce(s) jointe(s)
Formulaire avec upload d'images multiples
Bonjour,
Je suis assez nouvelle dans le développement web et je me trouve face à un problème que je ne parviens pas à résoudre avec rails 4:
J'ai créé une sorte de "blog" où l'admin va publier des articles avec une photo principale et d'autres photos pour la galerie.
J'ai créé deux uploaders avec carrierawve pour mes images, et du coup j'ai deux modèles. Un pour l'article avec son titre son contenu et son image principale, et l'autre modele en guise d'attachment de plusieurs photos pour ajouter à l'article.
Les problèmes:
Mon uplader sensé etre multiple ne prend qu'une seule image...
Si je ne remplis pas un champs alors que j'ai tout mis en 'required' j'ai l'erreur :
NoMethodError in ProgressesController#create
undefined method `model_name' for nil:NilClass
Pièce jointe 219361
Voici mon formulaire:
views/progresses/new.html.slim
Code:
1 2 3 4 5 6 7 8 9
|
= simple_form_for @progress do |f|
=f.input :title
=f.input :date
=f.input :content
=f.input :main_image
= simple_fields_for @progress_attachment do |f|
=f.input :image, multiple: true, name: "progress_attachments[image][]"
=f.button :submit |
controller
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
class ProgressesController < ApplicationController
def index
@progresses = Progress.all
end
def show
@progress = Progress.find(params[:id])
@progress_attachments = @progress.progress_attachments.all
end
def new
@progress = Progress.new
@progress_attachment = @progress.progress_attachments.build
end
def create
@progress = Progress.new(progress_params)
respond_to do |format|
if @progress.save
params[:progress_attachments]['image'].each do |a|
@progress_attachment = @progress.progress_attachments.create!(:image => a)
end
format.html { redirect_to progresses_path, notice: 'Progress was successfully created.' }
else
format.html { render action: 'new' }
end
end
end
private
def progress_params
params.require(:progress).permit(:title, :content, :date, :main_image, progress_attachments_attributes: [:id, :progress_id, :image])
end
end
end |
mon second controller
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
class ProgressesController < ApplicationController
def index
@progresses = Progress.all
end
def show
@progress = Progress.find(params[:id])
@progress_attachments = @progress.progress_attachments.all
end
def new
@progress = Progress.new
@progress_attachment = @progress.progress_attachments.build
end
def create
@progress = Progress.new(progress_params)
respond_to do |format|
if @progress.save
params[:progress_attachments]['image'].each do |a|
@progress_attachment = @progress.progress_attachments.create!(:image => a)
end
format.html { redirect_to admin_progresses_path, notice: 'Progress was successfully created.' }
else
format.html { render action: 'new' }
end
end
end
def update
respond_to do |format|
if @progress.update(article_params)
format.html { redirect_to @progress, notice: 'Article was successfully updated.' }
format.json { render :show, status: :ok, location: @progress }
else
format.html { render :edit }
format.json { render json: @progress.errors, status: :unprocessable_entity }
end
end
end
def destroy
@progress.destroy
respond_to do |format|
format.html { redirect_to articles_url, notice: 'Article was successfully destroyed.' }
format.json { head :no_content }
end
end
private
def progress_params
params.require(:progress).permit(:title, :content, :date, :main_image, progress_attachments_attributes: [:id, :progress_id, :image])
end
end |
Mes models
Code:
1 2 3 4 5 6
|
class ProgressAttachment < ActiveRecord::Base
mount_uploader :image, ImageUploader
belongs_to :progress
validates :image, presence: true
end |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
progress.rb
class Progress < ActiveRecord::Base
default_scope ->{order(created_at: :DESC)}
has_many :progress_attachments
accepts_nested_attributes_for :progress_attachments
mount_uploader :main_image, ImageUploader
validates :main_image, presence: true
validates :title, presence: true
validates :content, presence: true
validates :date, presence: true
end |
J'espère que vous pourrez m'aider ! Dans l'attente de vous lire je vous remercie d'avance :)