簡體   English   中英

Rails中的條件語句

[英]Conditional statement in Rails

我正在嘗試根據條件顯示一些代碼。 我在名為“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 %>

任何幫助是極大的贊賞。 謝謝

布爾列的值在ruby中為falsetrue ,而不是01 所以你應該這樣做:

<% 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 => "&pound;")

end

你需要檢查它是否等於true ,而不是1

布爾值存儲為1或0,但在從模型返回之前始終將其解釋為truefalse 這是很多混亂的根源。

使用訪問器方法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)

由於只有兩個是評估紅寶石, 因為假值nilfalse ,通常的情況是什么,是不是真的是零的情況。 有時你會有布爾列,如果沒有定義,可以是truefalsenil ,但這是不尋常的,可能會使人絆倒。

如果@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM