In meiner Rails-App verwende ich carrierwave für Bilder. Carrierwave schafft verschiedene Versionen eines Bildes und die URL kann wie folgt erreicht werden: picture.large.url
, picture.small.url
, picture.thumb.url
usw.Wie das String-Argument einer Methode als Methodenname-Variable verwendet wird
Ich möchte ein Verfahren schaffen, die ein String-Argument akzeptieren können, die dann für die Bild-URL verwendet werden können, . Etwas wie folgt aus:
def profile_url (version)
picture.version.url
end
So dann kann ich schreiben @user.profile_url('thumb')
und es sollte mir die URL in Daumengröße geben.
Ich bekomme eine undefinierte Methode 'Version' Fehler. Ist das möglich?
Sie die Version als Argument übergeben können auf [ 'url'] (http://www.rubydoc.info/Gems/Carrierwave/CarrierWave% 2FUploader% 2FVersions% 3Aurl), dh 'picture.url ('Daumen')' – Stefan
@Stefan Wenn Sie sicher sind, dann denke ich, dass Sie es als Antwort anbieten sollten. Obwohl die vorgeschlagene Antwort funktioniert, entfernt Ihr die Ausführlichkeit und Komplexität einer zusätzlichen Ebene über die Bibliothek und ist daher besser IMO. PS, an das OP, obwohl Sie eine Zeichenfolge angeben möchten, schlage ich vor, Sie überdenken und stattdessen ein Symbol verwenden. Es ist idiomatischer, einfacher zu tippen und einfacher (kein Fall oder Kodierung). –
@KeithBennett danke für den Hinweis! – user4584963