在我的Rails 4应用中,有一个Post模型,同时具有:copy
和:short_copy
属性。
在帖子#显示视图中,如果用户已定义:short_copy
,则显示:copy
,否则显示<% if @post.short_copy %>
<%= @post.short_copy %>
<% else %>
<%= @post.copy %>
<% end %>
。
所以,我实现了以下代码:
:short_copy
问题:当定义:copy
时,它会显示,但是,当它未定义时(:copy
定义<)> {{1}没有出现。
此代码有问题吗?
答案 0 :(得分:3)
使用String#blank?
检查值 - 空字符串仍为true
<% if !@post.short_copy.blank? %>
<%= @post.short_copy %>
<% else %>
<%= @post.copy %>
<% end %>
答案 1 :(得分:2)
我认为你的代码本质上没有任何问题,但你可能会被@ post.short_copy的价值误导。除非是nil
或false
,否则<% if @post.short_copy %>
将会运行。我想象@post.short_copy = ''
,因此在视图中不显示任何内容。
答案 2 :(得分:1)
我刚刚运行此代码段:
2.1.1 :002 > if("")
2.1.1 :003?> printf "yes"
2.1.1 :004?> else
2.1.1 :005 > printf "no"
2.1.1 :006?> end
(irb):6: warning: string literal in condition
yes => nil
所以 - 如果short_copy是空字符串,它将评估为true。所以试试这个:
2.1.1 :020 > unless("".empty?)
2.1.1 :021?> printf "yes"
2.1.1 :022?> else
2.1.1 :023 > printf "no"
2.1.1 :024?> end
no => nil
答案 3 :(得分:1)
我总是使用string.blank?
检查是否为空字符串。如果field是array,请使用array.empty?
。那么在你的情况下,你可以使用空白?
<% unless @post.short_copy.blank? %>
<%= @post.short_copy %>
<% else %>
<%= @post.copy %>
<% end %>