2016-08-01 9 views
0

In meiner App, wenn Benutzer registrieren, können sie einige Dateien hochladen. Ich muss den Upload auf maximal 5 Dateien beschränken. Also ich habe zwei Modelle mit folgendem CodeActiveRecord :: NestedAttributes :: TooManyRecords Fehler

class User < ActiveRecord::Base 
has_many :fileuploads, :dependent => :destroy 

accepts_nested_attributes_for :fileuploads, limit: 5, :allow_destroy => true 

    validate do |user| 
    if user.fileuploads && user.fileuploads.count > 5 
     errors[:base] << "You can add maximum 5 files." 
    end 
    end 
end 

und

class Fileupload < ActiveRecord::Base 
    belongs_to :user 
end 

und in meinem erstellen und zu aktualisieren Aktion Ich habe

respond_to do |format| 
    begin 
    if @user.save 
     format.html { redirect_to @user, notice: I18n.t('views.flash_messages.user_was_successfully_created') } 
    else 
     format.html { render action: "new" } 
    end 
    rescue ActiveRecord::NestedAttributes::TooManyRecords 
    flash[:error] = 'You can add maximum 5 files. ' 
    end 
end 

Wie Sie aus dem obigen Code das sehen ich verwende limit: 5 und auch den validate Rückruf. Aber beides funktioniert perfekt, wenn ich den Benutzer aktualisiere. Wenn ein Benutzer erstellt wird, wird diese Fehlermeldung jedoch nicht gespeichert. Ich erhalte diese Störung,

ActiveRecord::NestedAttributes::TooManyRecords in UsersController#create 
Maximum 5 records are allowed. Got 7 records instead. 

Warum also die Grenze und arbeitet während der Benutzer Update überprüfen, aber nicht während der Benutzererstellung? Und wie funktioniert es auch für die Erstellung von Aktionen?

+0

Haben Sie Ihre HTML-Codes mit der Navigator-Konsole überprüft, wenn es in Ihren Ansichten 7 Datensätze in Form gibt? –

+0

ja! Auch wenn ich 5 Dateien auswähle, dann speichere ich den Benutzer, aber wenn ich mehr als 5 auswähle, bekomme ich einen Fehler. Aber anstelle von Fehler möchte ich den Fehler retten, der nicht für Benutzer create arbeitet, aber für Benutzeraktualisierung funktioniert. –

+0

Inside begin & rescue Block Sie führen @ user.save aus, wo Sie die Parameter zur Benutzerzeile User.new (params [: user]) hinzufügen? – power

Antwort

0

Das ist, was für mich jetzt funktioniert. Bessere Lösungen sind willkommen.

Verwandte Themen