Rails: рендеринг моделей? - PullRequest
4 голосов
/ 11 августа 2009

Я могу придумать миллион неавтоматических способов визуализации модели в Rails, но мне интересно, есть ли какой-нибудь встроенный способ сделать это. Я хотел бы быть в состоянии

<%=@thing -%>

очевидно, что с частями вы можете сделать это (я имею в виду вызов render: частичный), но мне интересно, есть ли какой-нибудь стандартный способ связать представлений с моделями.

[Заранее спасибо, weppos, за исправление тегов по этому вопросу:)]

Ответы [ 3 ]

13 голосов
/ 11 августа 2009

Если вы передадите модель непосредственно в render , она попытается сделать для нее частичное.

<%= render @thing %>

То же самое, что и

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

Если вы передадите массив моделей ...

<%= render @things %>

Будет отображаться _thing частичное для каждого, как если бы вы это сделали.

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

Примечание: для этого требуется Rails 2.3. Если у вас есть более ранние версии Rails, вам нужно использовать опцию :part, чтобы сделать то же самое.

<%= render :partial => @thing %>
1 голос
/ 11 августа 2009

Ты не из Приморского ты? :) (Я спрашиваю, потому что именно так все и работает там, где каждая модель / визуализируемый объект знает, как визуализировать себя, и как вы выкладываете страницу.)

Что касается вашего фактического вопроса, стандартный способ сделать это - сделать частичное, которому вы подаете свой @thing. (то есть вы имеете право на деньги, связанные с частями, и именно так представления обычно связаны с моделями.)

1 голос
/ 11 августа 2009

Вы можете переопределить метод to_s в своей модели, чтобы вернуть желаемое представление, хотя это не обязательно желательно, потому что тогда ваша модель содержит проблемы представления, которые правильно принадлежат вашему представлению.

Кроме того, to_s действительно предназначен для возврата короткого строкового представления вашей модели, полезного для целей отладки и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...