2012-04-25 44 views
0

我正在與一個用戶模型,其中包括布爾6天在導軌輔助方法使用的變量的列名,其中()的查詢

[sun20, mon21, tue22, wed23, thur24, fri25] 

與具有選項以確認每個用戶工作其中6天他們正在參與

我試圖定義一個簡單的輔助方法:

def day_confirmed(day) 
    User.where(day: true).count 
    end 

在那裏我可以通過在一天,並找出有多少用戶被確認爲這一天,就像這樣:

day_confirmed('mon21') 

我的問題是,當我在where()使用day,軌假設我在尋找一個名爲day的輸出,而不是說我傳遞給我的方法值列。

當然,我忘記了一些東西,對嗎?

+0

在你搜索的細節。您試圖找到哪些列名爲'mon21'的用戶設置爲true? – Suborx 2012-04-25 06:01:29

+0

是的@Suborx是正確的。 – joshferrara 2012-04-25 14:21:28

回答

3

這句法:

User.where(day: true) 

等同於:

User.where(:day => true) 

這是因爲在哈希使用:代替=>,例如{ foo: bar },與使用密鑰的符號相同,例如, { :foo => bar }。或許,這將幫助:

foo = "I am a key" 

hsh = { foo: "bar" } 
# => { :foo => "bar" } 

hsh.keys 
# => [ :foo ] 

hsh = { foo => "bar" } 
# => { "I am a key" => "bar" } 

hsh.keys 
# => [ "I am a key" ] 

所以,如果你想使用的變量day的價值,而不是符號:day爲重點,試試這個來代替:

User.where(day => true) 
+0

工作就像一個魅力。謝謝! – joshferrara 2012-04-25 14:33:12

2

如果這些是你的專欄名,[sun20, mon21, tue22, wed23, thur24, fri25]

您在調用day_confirmed('mon21'),並試圖找到列「mon21」它在哪裏true,您可以在使用.to_sym 10個變量

def day_confirmed(day) 
    User.where(day.to_sym => true).count 
    end 

.to_sym將獲得date的價值,並將其隱蔽到:mon21