Как изменить выход рендеринга @events на основе страницы - PullRequest
1 голос
/ 09 октября 2011

В одном представлении у меня есть render @events, который использует _event.html.erb для вывода.Я хочу использовать render @events в другой области (домашней странице), но хочу, чтобы страница отображалась немного по-другому.Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 09 октября 2011

В зависимости от того, насколько они разные, вы можете использовать презентатор, как показано в последней версии Railscast .

Если различие структурное, просто сделайте две частичные.Небольшое дублирование в ваших представлениях вполне приемлемо и, вероятно, предпочтительнее, чем размещение логики в ваших представлениях.Постарайтесь не поддаваться искушению создавать операторы if в ваших представлениях.

0 голосов
/ 09 октября 2011

Я вижу, по крайней мере, это:

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

Для первого варианта (я буду использовать haml, и я сделаю это проще):

# events.html.haml
.index= render @events

# homepage.html.haml
.events= render @events

# your css
.index  { color: red; }
.events { color: blue; }

Что-то попроще, что я считаю одним из предложений @iain:

# action template
= render partial: '/events/event1', collection: @events

# _event1.html.haml
.name #{event1.name}

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

Я настоятельно рекомендую обратиться к руководствам , поскольку они очень четкие и легко читаемые.

Хэш здесь в стиле Ruby 1.9, если вы используете Ruby 1.8, замените что-то вроде collection: @events на что-то вроде :collection => @events

Надеюсь, это поможет, извините за радикальное редактирование моего ответа.

...