Rails: СУХИЕ Представления для Ролевых Пользователей - PullRequest
1 голос
/ 16 декабря 2010

Мне любопытно, каково современное состояние для СУХОГО представления в наши дни. У меня есть приложение, которое развивается уже более трех с половиной лет, и в наши дни слой представления не является удачным местом.

Сначала немного предыстории, у меня есть приложение, которое используется несколькими различными группами пользователей, и мне нужно добавить еще. Между тем, что видят разные пользователи, есть значительное совпадение, но все же многое остается эксклюзивным для каждой группы. У пользователей есть ограничения, что и сколько деталей они видят. Это ваше стандартное веб-приложение на основе ролей.

В настоящее время приложение использует некрасивую путаницу партиалов (с локальными переменными), партиалов, используя партиалы, блоки content_for и помощников, а также целую кучу дублирования.

Что я ищу, так это то, что люди делают в эти дни, чтобы сохранить свои взгляды СУХИМ?

Я начал смотреть на Cells (http://cells.rubyforge.org/),, но мне было интересно, что еще есть для решения этой проблемы.

Что вы используете для сложных и ролевых представлений?

1 Ответ

1 голос
/ 17 декабря 2010

Я столкнулся с той же проблемой / вызовом. Я начал реализовывать Cell, но наткнулся на стену. «Content_for» не поддерживается так, как вы ожидаете, и с ним невозможно добавить контент в основной макет с использованием представления ячейки.

Это ограничение в Rails / способ, которым Cell использует рельсы, и кажется, что его нельзя обойти.

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

Немного оффтоп, лучшее решение для меня вышеописанной проблемы заключается в следующем:

Если вся ячейка должна отображаться в другом блоке контента, для получения хорошего API можно использовать следующее:

Поместите следующий фрагмент кода в application_helper.rb:

def render_cell_for(id, cell, action, options = nil, &block)
  content_for id do
    render_cell(cell, action, options, &block)
  end
end

Используйте

<%=render_cell_for(:content_for, :cell, :action) %>

в ваших представлениях для отображения в контенте для блока.

...