2009-08-11 7 views
4

Je peux penser à un million de façons pas si automatiques de rendre un modèle dans Rails, mais je me demande s'il existe un moyen intégré de le faire. Je voudrais pouvoir cetteRails: Rendu des modèles?

<%[email protected] -%> 

évidemment avec partials vous pouvez le faire (je veux dire, appellez render: partiel), mais je me demande s'il y a une méthode standard pour associé vues avec des modèles .

[Merci à l'avance, weppos, pour fixer les balises sur cette question :)]

Répondre

13

Si vous transmettez un modèle directement à render, il tentera d'en rendre un partiel.

<%= render @thing %> 

C'est la même chose que.

<%= render :partial => 'things/thing', :object => @thing %> 

Si vous passez un tableau de modèles ...

<%= render @things %> 

Il va rendre la _thing partielle pour chacun comme si vous l'avez fait.

<%= render :partial => 'things/thing', :collection => @things %> 

Remarque: cela nécessite Rails 2.3. Si vous avez des versions antérieures de Rails, vous devrez utiliser l'option: partial pour faire la même chose.

<%= render :partial => @thing %> 
+0

Wow. C'était ce que je cherchais. De bonnes choses, merci. –

1

Vous pouvez remplacer la méthode to_s dans votre modèle pour retourner la représentation que vous voulez, bien que ce n'est pas nécessairement souhaitable car alors votre modèle contient des problèmes de présentation qui appartiennent correctement à votre vue.

Par ailleurs, to_s est vraiment destiné à retourner une courte représentation de chaîne de votre modèle utile pour le débogage etc.

+0

Exactement. J'ai ajouté un .to_html sur le modèle, mais c'est l'endroit TOTALEMENT mauvais pour le code de vue. Ce que tu mentionnes. En tout cas, merci. –

1

Vous n'êtes pas à venir de Seaside êtes-vous? :) (Je demande parce que c'est exactement comment les choses fonctionnent là, où chaque objet modelable/renderable sait comment se rendre, et c'est ainsi que vous étendez la page.)

En ce qui concerne votre question actuelle, la manière standard le faire est en rendant un partiel que vous nourrissez votre @thing. (C'est-à-dire que vous avez raison sur les partiels, et c'est ainsi que les vues sont généralement associées aux modèles.)

+1

Non, Seaside pour moi est juste une place sur le court métrage de Jersey. http://en.wikipedia.org/wiki/Seaside_Heights,_New_Jersey –

+0

Cette façon de penser est très OO, cependant, et c'est typique de smalltalk. –