Подтвердить что ты не робот

Ruby on Rails: условно отображает частичную

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

Я разместил этот блок в частичном шаблоне и добавил его в соответствующее место в моем макете. Есть ли способ очистить частичное условно? Есть ли лучший способ подойти к этой проблеме?

4b9b3361

Ответ 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 %>

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