Вы можете переместить часть своего кода из ваших представлений в:
- a помощник вида
- контроллер
- модель
A Rails Helper (опция 1) кажется более подходящей для вашего случая.Если вам нужно, например, заполнить тег select, то помощник с методом, который возвращает options_for_select(...your complex structure formatted)
, будет правильным выбором.
Вы можете использовать options_for_select
(из направляющих ) таким образом
<%= options_for_select([[object1.attr1, object1.attr2],[object2.attr2,object2.attr2],...], 2) %>
станет:
<option value="object1-attr2-value">object1-attr1-value</option>
<option value="object2-attr2-value" selected="selected">object2.attr1-value</option>
...
Вы можете добавитьэтот метод внутри ApplicationHelper (если это необходимо для всего приложения) или в помощнике для конкретной модели:
# app/helpers/...the helper you choose
def options_for_your_complex_select(default_state)
options_for_select( [[object1.attr1, object1.attr2],[object2.attr2,object2.attr2],...],
default_state )
end
и используйте этот помощник в своих представлениях таким образом (пожалуйста, выберителучшее имя метода, чем у меня :)): <%= select_tag :state, options_for_your_complex_select(params[:default_state]) %>
Это поможет вам сделать ваш код более управляемым, а представление - более читабельным. Rails лучшие практики веб-сайт имеет больше об этом.Посмотрите, как переместите свой код в ViewHelper , Модель и Контроллер .
Если вам приходится иметь дело смножество атрибутов, этот скринкаст о драгоценном драпировке от @ryanb объясняет, как упростить ваши представления.