Ruby on Rails: условно отображает частичную
Я не уверен, что здесь я использую лучший подход, но у меня есть блок данных, который я хочу показать после того, как поиск будет выполнен и вообще не будет там. Прежде всего, показывать нечего, и во-вторых, эта модель ссылается на нуль, поэтому она генерирует исключение.
Я разместил этот блок в частичном шаблоне и добавил его в соответствующее место в моем макете. Есть ли способ очистить частичное условно? Есть ли лучший способ подойти к этой проблеме?
Ответы
Ответ 1
Ruby позволяет делать такие приятные вещи:
<%= render :partial => "foo/bar" if @conditions %>
Чтобы сделать это немного легче читать и понимать, его можно записать как:
<%= render(:partial => "foo/bar") if @conditions %>
render
- это функция, и вы передаете ей хеш, который сообщает, какой частичный для рендеринга. Ruby позволяет размещать вещи на одной строке (что часто делает их более читабельными и сжатыми, особенно в представлениях), поэтому раздел if @conditions
является просто регулярным оператором if. Это также можно сделать так:
<% if @conditions %>
<%= render :partial => "foo/bar" %>
<% end %>
Edit:
Ruby также позволяет использовать ключевое слово unless
вместо if
. Это делает код еще более удобочитаемым и мешает вам делать отрицательные сравнения.
<%= render :partial => "foo/bar" if [email protected] %>
#becomes
<%= render :partial => "foo/bar" unless @conditions %>
Ответ 2
Один простой способ - использовать вспомогательный метод. Помощники, как правило, немного чище, чем прямое представление логики.
Итак, ваш взгляд может выглядеть примерно так:
<%= render_stuff_conditionally %>
и ваш помощник будет иметь способ контролировать это:
def render_stuff_conditionally
if @contional_check
render :partial => 'stuff'
end
end
где, очевидно, вещи называются более подходящими
Ответ 3
Предполагая, что я правильно слежу за вами, вы делаете это на уровне представления.
<% if [email protected]_search_data.nil? %>
<% render :partial => 'foo/bar' %>
<% end %>
Надеюсь, что это поможет. Если нет, возможно, отправьте пример своего кода.