Ruby on rails Rails中的条件语句

Ruby on rails Rails中的条件语句,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试根据条件显示一些代码。我在一个名为“show_weekly”的表中有一个布尔字段。我尝试的是:如果列==1,则显示第一行,否则显示第二行代码。出于某种原因,它只显示第二行 <% if @listing.show_weekly == 1 %> <%= number_to_currency(@listing.price/4, :unit => "&pound;") %> / week <% else %> <%= number_

我正在尝试根据条件显示一些代码。我在一个名为“show_weekly”的表中有一个布尔字段。我尝试的是:如果列==1,则显示第一行,否则显示第二行代码。出于某种原因,它只显示第二行

<% if @listing.show_weekly == 1 %>

<%= number_to_currency(@listing.price/4, :unit => "&pound;") %> / week

<% else %>

<%= number_to_currency(@listing.price, :unit => "&pound;") %> / month
<% end %>

“£;”)%>/周
“£;”)%>/月

非常感谢您的帮助。谢谢

您需要检查它是否等于
true
,而不是
1
在ruby中,布尔列的值将是
false
true
,而不是
0
1
。所以你应该:

<% if @listing.show_weekly %>


如果
@listing.show\u weekly
包含布尔值,而不是

,只需测试是否为真:

<% if @listing.show_weekly %>

.....

<% else %>

....

<% end %>

.....
....
请注意,您甚至不需要“
==true
”。这是因为IF语句只查看是否有一个
true
值从它后面的任何表达式返回。如果
@listing.show_weekly
包含
true
的值,则这就是If语句所提供的全部内容

布尔值存储为1或0,但在从模型返回之前,它总是被解释为
true
false
。这是造成许多混乱的根源

使用访问器方法
show_weekly?
会有所帮助,因为方法名称中的问号通常表示它将返回布尔值,或者可以作为布尔值计算的值

如果您具备以下条件,则更易于阅读:

<% if @listing.show_weekly? %>
   ...
<% else %>
   ...
<% endif %>

由于在Ruby中只有两个值计算为false,
nil
false
,因此通常情况下,任何不为true的值都是nil。有时,如果未定义布尔列,它可以是
true
false
nil
,但这是不寻常的,可能会让人绊倒。

我建议在模型中添加一个方法

def print_price

   @p =  this.show_weekly? ? this.price / 4 : this.price 
   number_to_currency (@p, :unit => "&pound;")

end
def print_price

   @p =  this.show_weekly? ? this.price / 4 : this.price 
   number_to_currency (@p, :unit => "&pound;")

end