2017-11-14 1 views
0

Das ist mein Article ModellAnzeige Fehlermeldungen für die dazugehörige Modell

class Article 

has_many :pictures, autosave: true, dependent: :destroy 

validates :title, presence: true 
validates :text, presence: true 

Das ist mein Picture Modell ist

class Picture 
include Mongoid::Document 
include Mongoid::Paperclip 

belongs_to :article 
has_mongoid_attached_file :pic, 
    preserve_files: true, 
    :url => "/public/pictures/:style/:basename.:extension", 
    styles: { format: "400x400", thumb: "150x150>" } 


validates_attachment :pic, content_type: { content_type: /\Aimage\/.*\z/ }, 
size: { in: 50.kilobytes..3.megabytes } 

ich alle Fehlermeldungen in meiner Ansicht angezeigt werden soll, aber wenn Bild ist ungültig i habe viele Nachrichten für einen Fehler. Zum Beispiel, wenn Inhaltstyp ungültig ist, ich habe:

  1. "Bilder ungültig" in @article.errors.full_messages (i es nicht brauchen)
  2. "Pic ungültig" in @article.pictures.first.full_messages (i es nicht brauchen)
  3. "Pic_content_type ungültig" in @article.pictures.first.full_messages (es ist nur eine Nachricht, die ich wirklich brauche)

Irgendwelche Ideen? Vielen Dank im Voraus und Entschuldigung für meine Englisch

+0

Wie generieren Sie das Formular? – kolas

+0

Ich benutze form_for helper. –

+0

Wie kann ich @ article.errors.full_message "Pictures invalid" zu "Picture * picture_name * pic_content_type invalid" ändern? Ist es möglich? –

Antwort

0

Ich bin mir nicht sicher, ob ich Ihre Frage verstehe, aber ein paar Dinge in den Sinn kommen, könnten Sie untersuchen.

Paperclip wird mit einigen Optionen validation geliefert, und Sie können in Betracht ziehen, sie zu ändern, um die von Ihnen erwünschten Fehlermeldungen zu erstellen, wie unter here beschrieben.

Es scheint, dass Sie möglicherweise die richtige Fehlermeldung (en) auswählen müssen, um anzuzeigen, indem Sie das Array der empfangenen Fehlermeldungen durchlaufen.

@article.pictures.first.full_messages[index of message you want to display] 

Auf einer anderen Anmerkung, sah ich, dass Sie ein reg exp Muster für Ihren Inhaltstyp Validierung verwenden und die Büroklammer docs warnen vor Schwachstellen, wenn diese offen gelassen wird. Sie empfehlen etwas wie das:

validates_attachment :pic, 
content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] } 

Ich hoffe, das ist zumindest wenig hilfreich.

+0

Zum Beispiel: Ich versuche Artikel zu erstellen und ich geben ungültigen Text (zu kurz) und ungültige Fehler hochladen (nicht Bild, PDF zum Beispiel). Ich möchte einen guten Weg finden, um zwei Nachrichten anzuzeigen: "Text ist zu kurz" und "Datei * Dateiname * hat ungültigen Typ". –

+0

Dieser Beitrag umfasst die Änderung der Nachrichten, die mit Büroklammer Validierungen kommen: https://stackoverflow.com/questions/10711504/cleaning-up-paperclip-error-messages Wenn Sie ihr Muster folgen und Ihre aktuelle Validierung behalten möchte es dies für den Inhaltstyp: 'validates_attachment: pic, content_type: {content_type: /\Aimage\/.*\z/,: message =>" Datei Dateiname hat ungültigen Typ "}, size: {in: 50.kilobytes. .3.megabytes} ' Dann können Sie den Fehler zu Ihrer Ansicht vom Controller übergeben, indem Sie [Rails Flash] (http://api.rubyonrails.org/classes/ActionDispatch/Flash.html) verwenden. –

Verwandte Themen