0

Rails 3.1 如果变量为 nil,则尝试将 div 上的显示值设置为 none

在我看来,我尝试了以下方法:

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

任何帮助表示赞赏

4

4 回答 4

3

将您所知道的 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>
于 2013-08-14T15:37:17.390 回答
1

除了 MrYoshiji 在评论中已经显示的内容之外,style如果属性没有价值,则无需生成该属性。尝试:

<tr class = "level3"<%= " style='display: none';" if product.volume3.nil? %>>
于 2013-08-14T15:37:13.103 回答
0

如果在 volume3 为 nil 时没有理由显示它,您可能只想这样做:

<% unless product.volume.nil? %>
  <tr class="level3">
  # etc etc.
<% end %>
于 2013-08-14T15:38:30.297 回答
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...
于 2013-08-14T15:41:10.240 回答