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>
任何帮助表示赞赏
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>
任何帮助表示赞赏
将您所知道的 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>
除了 MrYoshiji 在评论中已经显示的内容之外,style
如果属性没有价值,则无需生成该属性。尝试:
<tr class = "level3"<%= " style='display: none';" if product.volume3.nil? %>>
如果在 volume3 为 nil 时没有理由显示它,您可能只想这样做:
<% unless product.volume.nil? %>
<tr class="level3">
# etc etc.
<% end %>
就我个人而言,我会编写一个助手并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...