2013-08-14 5 views
0

Rails 3.1 Попытка стилизации значение дисплея на DIV, чтобы никто, если переменная равна нулюRails Стиль Div Условно

Я попытался следующие, на мой взгляд:

<tr class = "level3" <%= attributes["style"] = "display: none" if product.volume3.nil? %>> 
<td><%=product.volume3%></td> 
<td><%= number_to_currency (product.price3)%></td> 

любая помощь

+0

Вы почти правы: '<тр класс = "level3" стиль = "<% = "дисплей: нет;"? Если product.volume3.nil%>">' – MrYoshiji

ответ

1

Измените то, что вы знаете как HTML как HTML, а не как строки. То, как вы его написали, возвращает небезопасную строку HTML. Так как вы знаете, что вы рендеринга HTML, поместите его между условными и сделать его в качестве исходного HTML:

<tr class="level3" <% if product.volume3.nil? %>style="display:none;"<% end %>> 
    <td><%=product.volume3%></td> 
    <td><%= number_to_currency (product.price3)%></td> 
</tr> 
1

Добавляя к тому, что уже было указано в комментарии MrYoshiji, вам не нужно генерировать атрибут style, если он не будет иметь значения. Попытка:

<tr class = "level3"<%= " style='display: none';" if product.volume3.nil? %>> 
+0

Использование '<% =' для рендеринга строк, поскольку HTML дает вам привычку к рендерингу HTML-небезопасных строк. Я ударил несколько случаев таким образом, что избежал вещей, которые я не хотел, и теперь избегаю этого. Render HTML как необработанный HTML: '<% if product.volume3.nil? %> style = "display: none;" <% end %> ' –

+0

@ssorallen, я не думаю, что нам нужно беспокоиться об этом в этом случае. – vee

+1

Правильно вы этого не делаете. Наш код дает тот же результат, но привычка к рендерингу HTML с '<% =' приводит к тому, что код воняет как '<% = var.nil? ? ' ' .html_safe: var%> '. Я избегаю этой картины. –

0

Если нет никаких оснований для того, чтобы отображаться, если volume3 отсутствует, вы можете просто хотите сделать это, как это вместо :

<% unless product.volume.nil? %> 
    <tr class="level3"> 
    # etc etc. 
<% end %> 
0

Лично я хотел бы написать помощник и использовать content_tag_for с классом CSS.

= content_tag_for :tr, product, class: "#{'hidden' if product.volume3.nil?}" do 
    # rest of code 

CSS:

.hidden { display: none; } 

Если вы хотите получить фантазии, добавить помощника:

def class_for(product) 
    'hidden' unless product.volume3.present? 
end 

= content_tag_for :tr, product, class: class_for(product) do 

Rails уже есть инструменты для решения этих проблем, и я бы не рекомендовал засорять ваш просмотров с условиями.

Наконец, как прокомментировали другие, вы должны отобразить только <tr>, если вам нужно.

= if product.volume3.nil? 
    <tr> etc... 
Смежные вопросы