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
Voici mon formulaire:
views/progresses/new.html.slim
controller
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :submitmon second controller
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Mes models
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class ProgressAttachment < ActiveRecord::Base mount_uploader :image, ImageUploader belongs_to :progress validates :image, presence: true endJ'espère que vous pourrez m'aider ! Dans l'attente de vous lire je vous remercie d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager