[英]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.