Ruby (Rails) Délégué attributs à un autre modèle de la méthode?

-EDIT-

Après avoir lu au sujet de la méthode du Délégué de la première réponse, ma question est, est-il possible de déléguer deux méthodes différentes pour une autre méthode unique.

IE: j'ai actuellement: @photo.pièce jointe.fichier.url, et @photo.pièce jointe.de la hauteur, et @photo.pièce jointe.largeur

J'aimerais être en mesure d'accéder à toutes ces via @photo.fichier.url, @photo.fichier.hauteur, @photo.fichier.la largeur.

La raison pour laquelle la syntaxe est l'Attachement est un modèle qui utilise un Trombone pour gérer les fichiers, Trombone est la génération de l' .méthode de fichiers (le modèle est appelé pièce Jointe, le modèle utilise un Trombone, du has_attached_file :file).

-QUESTION D'ORIGINE-

Je me demandais à propos de l'aliasing des méthodes et des attributs en Ruby (je pense que c'est un général ruby question, bien que ma demande est en Rails 3):

J'ai deux modèles: Photo has_one pièce Jointe.

Attachement a la "hauteur" et "largeur" des attributs, et un "fichier" (ou la méthode de Trombone).

Donc par défaut je peux accéder à des bits du modèle de Fixation de la sorte:

photo.attachment.width # returns width in px
photo.attachment.height # returns height in px
photo.attachment.file # returns file path
photo.attachment.file.url #returns url for the default style variant of the image
photo.attachment.file.url(:style) #returns the url for a given style variant of the image

Maintenant, dans ma photo de classe que j'ai créé cette méthode:

def file(*args)
    attachment.file(*args)
end

Alors, maintenant, je peux tout simplement utiliser:

photo.file # returns file path
photo.file.url # returns file url (or variant url if you pass a style symbol)

Ma question est, j'ai été en mesure de diriger photo.attachment.file juste photo.file, mais je peux aussi la carte de la hauteur et la largeur de photo.file, de sorte que, par souci de cohérence, j'ai pu accéder à la hauteur et la largeur des attributs par photo.file.height et photo.file.width?

Est une chose possible, et si oui, que faut-il ressembler?

Pourquoi ne pas déléguer la Photo n ° de hauteur à la pièce Jointe#hauteur? Pourquoi s'embêter avec photo.fichier.la hauteur?
Juste par souci de cohérence. Photo.la hauteur est bien, mais si tous les fichiers de commandes associées en vertu de la Photo.fichier c'est plus raccord avec le directeur de la moindre Surprise, du moins pour moi. Aussi, juste curieux de savoir si cela peut être fait.
Pourquoi ce n'est pas acceptée ? Rails délégué méthode est la réponse ici ? Quel était le problème avec ça ?
Peut-être que je ne suis pas à comprendre quelque chose, mais ce que je veux savoir c'est si je peux déléguer @photo.attachment.height, où height est un attribut du modèle de fixation, à @photo.file.height, où file est une méthode fournie par un plugin. Je ne comprends pas comment faire, s'appuyant sur la réponse, et je n'ai pas pu le déduire pour moi-même. Donc, si vous pouvez répondre à cette question, vous bénéficiez de la prime 🙂
Concernant votre modifier, ruby ne pas avoir une notion d'attributs par rapport aux méthodes. Ce sont tout simplement des méthodes.

OriginalL'auteur Andrew | 2011-01-16