0

我正在使用包含布尔值的用户模型 6 天

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

每个用户都可以选择确认他们参与的 6 天中的哪一天。

我正在尝试定义一个简单的辅助方法:

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

我可以在一天内通过并找出当天确认了多少用户,如下所示:

day_confirmed('mon21')

我的问题是,当我在 中使用daywhere(),rails 假定我正在搜索一个名为的列,day而不是输出我传递给我的方法的值。

我肯定忘记了什么,对吧?

4

2 回答 2

4

这个语法:

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 )
于 2012-04-25T05:57:14.703 回答
2

如果这些是您的列名,[sun20, mon21, tue22, wed23, thur24, fri25]

而你正在调用day_confirmed('mon21')并试图找到它所在的列“mon21” true,你可以.to_symdate变量上使用

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

.to_sym获得 的值date,并将其转换为:mon21

于 2012-04-25T06:14:01.860 回答