Rails 4:条件显示在视图

时间:2015-10-23 00:42:00

标签: ruby-on-rails ruby ruby-on-rails-4 if-statement view

在我的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}没有出现。

此代码有问题吗?

4 个答案:

答案 0 :(得分:3)

使用String#blank?检查值 - 空字符串仍为true

<% if !@post.short_copy.blank? %>
  <%= @post.short_copy %>
<% else %>
  <%= @post.copy %>
<% end %>

答案 1 :(得分:2)

我认为你的代码本质上没有任何问题,但你可能会被@ post.short_copy的价值误导。除非是nilfalse,否则<% 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 %>