我正在使用包含布尔值6天的用户模型
[sun20, mon21, tue22, wed23, thur24, fri25]
每个用户都可以选择确认他们参加的6天中的哪一天。
我试图定义一个简单的辅助方法:
def day_confirmed(day)
User.where(day: true).count
end
我可以在一天内通过并查看当天确认的用户数量,如下所示:
day_confirmed('mon21')
我的问题是,当我在day
中使用where()
时,rails会假设我正在搜索名为day
的列,而不是输出我在&#39}中的值; m传入我的方法。
当然,我忘了什么,对吧?
答案 0 :(得分: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 )
答案 1 :(得分:2)
如果这些是您的列名,[sun20, mon21, tue22, wed23, thur24, fri25]
您正在调用day_confirmed('mon21')
并尝试找到{mon}所在的列'mon21',您可以在true
变量上使用.to_sym
date
def day_confirmed(day)
User.where(day.to_sym => true).count
end
将获得.to_sym
的值,并将其转换为date