簡體   English   中英

在rails下計算布爾值

[英]Counting boolean values under rails

我在 RoR 應用程序中的兩個模型之間有標准的主從關系。 詳細記錄包含四個布爾字段,指示某物的存在/不存在。

當我顯示詳細記錄時,我想添加一個摘要,指示四個布爾字段中的每個字段的布爾值都設置為 True 的記錄數。

例如:日期 | 布爾字段 1 | 布爾字段 2 | 等 2009/08/29 | T | T | 2009/08/30 | T | F | 2009/08/31 | F | T | 2009/09/01 | F | T |

總計:4 2 3

我嘗試使用類似 @entries.count(["Boolean Field 1", true]) 的方式,我認為有兩種方法可以計算這些值:一種是在模型中通過執行 SQL 查詢(丑陋)或在使用計數器查看級別(再次丑陋。)有沒有其他方法可以實現我想要的?

感謝您的時間,

安傑洛斯·阿拉帕齊斯

或許

@entries.select {|r| r.bool_field1}.size 

你可以這樣做:

@entries.count(:conditions => { :boolean_field_1 => true })

您可以通過執行命名范圍來完善它:

named_scope :booleans,  :conditions => { :boolean_field_1 => true })

進而

@entries.booleans.count

或者,如果您已經擁有數組中的所有項目(而不是少數項目)並且不想訪問數據庫......

Rails 提供了一個 ? 所有列的方法。 所以當你有:

@entry.boolean_field

你還有:

@entry.boolean_field?

所以你可以這樣做:

@entries.collect(&:boolean_field?).length

sql 並不像 rails 所說的那樣丑陋,而且效率很高,只需將其設置為 named_scope 並且您的控制器/視圖仍然看起來很漂亮

因為您將所有條目都作為 Rails 對象,所以您可以使用最短的形式:

@entries.count(&:boolean_field1?)

它使用Enumerable#count

但請記住,使用 Ruby(而不是 SQL)很重要。 如果您想在不從數據庫讀取所有記錄的情況下進行計數,則需要使用不同的方法來提高效率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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