Ich benutze Büroklammer für Anlagen für mehrere Modelle mit accesses_nested_attributes_for. Gibt es eine Möglichkeit, für jedes Modell bestimmte Optionen für den Büroklammerstil anzugeben?Rails Paperclip polymorphe Stile
Antwort
Ja. Ich verwende Single Table Vererbung (STI) auf Websites für die Verarbeitung von Audio-, Video- und Bilddateien über ein Asset-Modell.
# models/Asset.rb
class Asset < ActiveRecord::Base
# Asset has to exist as a model in order to provide inheritance
# It can't just be a table in the db like in HABTM.
end
# models/Audio.rb
class Audio < Asset # !note inheritance from Asset rather than AR!
# I only ever need the original file
has_attached_file :file
end
# models/Video.rb
class Video < Asset
has_attached_file :file,
:styles => {
:thumbnail => '180x180',
:ipod => ['320x480', :mp4]
},
:processors => "video_thumbnail"
end
# models/Image.rb
class Image < Asset
has_attached_file :file,
:styles => {
:medium => "300x300>",
:small => "150x150>",
:thumb => "40x40>",
:bigthumb => "60x60>"
}
end
Sie sind alle in Rails als :file
, aber die Steuerung (A/V/I) weiß auf das richtige Modell zu speichern. Denken Sie daran, dass alle Attribute für eine der Medienformen in Asset
enthalten sein müssen: Wenn das Video keine Bildunterschriften, aber Bilder benötigt, dann ist das Attribut caption für Video
null. Es wird sich nicht beschweren.
Assoziationen funktionieren auch gut, wenn sie an die STI-Modelle angeschlossen sind. User has_many :videos
funktioniert genauso wie Sie es jetzt verwenden, stellen Sie nur sicher, dass Sie nicht versuchen, direkt in Asset zu speichern.
Schließlich, da Sie ein Asset-Modell haben, können Sie immer noch direkt daraus lesen, wenn z. Sie möchten eine Liste der 20 neuesten Assets. Außerdem ist dieses Beispiel nicht auf das Trennen von Medientypen beschränkt, es kann für verschiedene Arten der gleichen Sache ebenso verwendet werden: Avatar < Asset, Galerie < Asset und so weiter.
Ein viel nicer Weg sein kann, (wenn die Verwendung mit Bildern zu tun):
class Image < ActiveRecord::Base
belongs_to :imageable, :polymorphic => true
has_attached_file :attachment, styles: lambda {
|attachment| {
thumb: (
attachment.instance.imageable_type.eql?("Product") ? ["300>", 'jpg'] : ["200>", 'jpg']
),
medium: (
["500>", 'jpg']
)
}
}
end
Funktioniert Ihre Antwort wirklich? attachment.instance.imageable_type ist null –
@ArtemAminov Ja, es funktioniert .. wie ich es in einem meiner Projekte verwende. –
vielleicht kannst du mir bei meinem Projekt helfen, siehe Code hier [link] (http://stackoverflow.com/questions/19901485/paperclip-polymorphic-styles) –
- 1. Paperclip separate Stile
- 2. Rails Datei hochladen w/Paperclip und polymorphe Assoziationen
- 3. Uploadify + Paperclip + Rails verschachtelte Zuordnung before_save
- 4. Rails polymorphe Abstimmungsstruktur
- 5. Rails polymorphe Vereinigung accepts_nested_attributes
- 6. Paperclip, Rails 2.3.3 und OSX
- 7. Rails Paperclip: update vs. update_attributes
- 8. Ruby on Rails polymorphe Assoziation
- 9. Importieren alter Daten mit Rails und Paperclip
- 10. Mehrere Inhaltstypen mit Paperclip und Rails bestätigen
- 11. Paperclip gem bug - Ruby on Rails
- 12. Probleme RMagick mit Paperclip in Rails 3
- 13. Ruby on Rails PaperClip Gem validate_attachement Fehler
- 14. Overriding content_type für Rails Paperclip plugin
- 15. Polymorphe Hatmt-Beziehungen mit Rails/ActiveRecord
- 16. Ruby on Rails: Polymorphe Vereinigung Verwirrung
- 17. Rails Abfrage polymorphe Vereinigung im Zusammenhang
- 18. Rails 3 polymorphe Vereinigung eine Nameerror
- 19. Routing Fehler mit Rails Favoriten, Polymorphe
- 20. Rails polymorphe Join-Tabelle arbeiten beide Wege
- 21. Paperclip Fehler - NotIdentifiedByImageMagickError
- 22. Paperclip Ausnahme: Paperclip :: AdapterRegistry :: NoHandlerError
- 23. Schienen: Paperclip & Vorschau?
- 24. Ruby on Rails Problem mit Paperclip beim Hochladen s3
- 25. AJAX Image Upload mit React, Rails und Paperclip
- 26. Rails Paperclip S3 URL der angehängten Datei verbergen
- 27. Verstecke Amazon-URLs bei Verwendung von S3, Rails und Paperclip
- 28. Bild in der Datenbank speichern mit Rails Paperclip-Plugin
- 29. Paperclip: Wie speichert man ein Bild in einer Rails-Konsole?
- 30. Google Cloud Storage-Anforderungen sind langsam mit Paperclip und Rails
Wo legen Sie fest, wo die Datei gespeichert wird? Auf dem Asset-Modell? Oder ist das Asset-Modell leer? sagen: ': Speicher =>: s3, : Eimer => Rails.application.config.aws_s3_bucket, : s3_credentials =>" # {Schienen.root} /config/s3.yml ", : Pfad =>": class /: id /: style /: basename.: extension "' –
Ich benutze einfach den Standardwert und lasse das Asset-Modell leer, aber ich wette, dass es eine Möglichkeit gibt, im Asset-Modell eine Standardeinstellung festzulegen. Ich habe es nicht versucht. – Eric