2012-04-25 25 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