Ruby on Rails: условно отображать частичное - PullRequest
36 голосов
/ 04 марта 2010

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

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

Ответы [ 3 ]

47 голосов
/ 04 марта 2010

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 %>

Изменить:

Ruby также позволяет использовать ключевое слово unless вместо if. Это делает код еще более читабельным и избавляет вас от необходимости выполнять негативные сравнения.

<%= render :partial => "foo/bar" if !@conditions %>
#becomes
<%= render :partial => "foo/bar" unless @conditions %>
9 голосов
/ 04 марта 2010

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

Итак, ваш взгляд может выглядеть примерно так:

<%= render_stuff_conditionally %>

и у вашего помощника будет метод для управления этим:

def render_stuff_conditionally
  if @contional_check
    render :partial => 'stuff'
  end
end

где, очевидно, вещи названы более подходящим образом

2 голосов
/ 04 марта 2010

Предполагая, что я следую за вами, вы делаете это на уровне просмотра.

<% if !@my_search_data.nil? %>
<% render :partial => 'foo/bar' %>
<% end %>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...