[英]Conditional statement in Rails
我正在嘗試根據條件顯示一些代碼。 我在名為“show_weekly”的表中有一個布爾字段。 我正在嘗試的是:如果列== 1然后顯示第一行,則顯示第二行代碼。 由於某種原因,它只顯示第二行。
<% if @listing.show_weekly == 1 %>
<%= number_to_currency(@listing.price/4, :unit => "£") %> / week
<% else %>
<%= number_to_currency(@listing.price, :unit => "£") %> / month
<% end %>
任何幫助是極大的贊賞。 謝謝
布爾列的值在ruby中為false
或true
,而不是0
或1
。 所以你應該這樣做:
<% if @listing.show_weekly %>
而不是<% if @listing.show_weekly == 1 %>
我建議為你的模型添加一個方法
def print_price
@p = this.show_weekly? ? this.price / 4 : this.price
number_to_currency (@p, :unit => "£")
end
你需要檢查它是否等於true
,而不是1
布爾值存儲為1或0,但在從模型返回之前始終將其解釋為true
或false
。 這是很多混亂的根源。
使用訪問器方法show_weekly?
可以幫助,因為方法名稱中的問號通常表示它將返回一個布爾值,或者可以被評估為布爾值的東西。
如果您有以下內容,它將更具可讀性:
<% if @listing.show_weekly? %>
...
<% else %>
...
<% endif %>
盡可能避免與特定的硬編碼值進行比較。 例如,以下是多余的,但我一直看到它:
# Example: Comparison to nil
if (@something == nil)
# Should be: Checking if initialized
if (@something)
# Example: Comparison to true
if (@something == true)
# Should be: Testing directly
if (@something)
由於只有兩個是評估紅寶石, 因為假值nil
和false
,通常的情況是什么,是不是真的是零的情況。 有時你會有布爾列,如果沒有定義,可以是true
, false
或nil
,但這是不尋常的,可能會使人絆倒。
如果@listing.show_weekly
包含一個布爾值, @listing.show_weekly
測試true:
<% if @listing.show_weekly %>
.....
<% else %>
....
<% end %>
請注意,您甚至不需要“ == true
”。 這是因為IF語句只查看是否有從其后面的任何表達式返回的true
值。 如果@listing.show_weekly
包含值true
那么所有的IF語句都會看到你是否提供了它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.