Ruby on rails 在rails助手方法where()查询中使用变量列名

Ruby on rails 在rails助手方法where()查询中使用变量列名,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我正在用一个包含布尔值的用户模型工作6天 [sun20, mon21, tue22, wed23, thur24, fri25] 每个用户都可以选择确认他们参与的6天中的哪一天 我试图定义一个简单的助手方法: def day_confirmed(day) User.where(day: true).count end 我可以在一天内通过,了解当天确认了多少用户,如下所示: day_confirmed('mon21') 我的问题是,当我在where()中使用day时,rail

我正在用一个包含布尔值的用户模型工作6天

[sun20, mon21, tue22, wed23, thur24, fri25]
每个用户都可以选择确认他们参与的6天中的哪一天

我试图定义一个简单的助手方法:

  def day_confirmed(day)
    User.where(day: true).count
  end
我可以在一天内通过,了解当天确认了多少用户,如下所示:

day_confirmed('mon21')
我的问题是,当我在
where()
中使用
day
时,rails假定我正在搜索名为
day
的列,而不是输出传递给方法的值

我肯定忘了什么,对吧?

这个语法:

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 )
此语法:

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 )

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

如果您正在调用
day\u confirm('mon21')
,并试图在
true
的位置找到列“mon21”,您可以使用
日期
变量执行sym

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

.to_sym
将获取日期的值,并将其转换为
:mon21
如果这些是您的列名,
[sun20,mon21,tue22,wed23,thur24,fri25]

如果您正在调用
day\u confirm('mon21')
,并试图在
true
的位置找到列“mon21”,您可以使用
日期
变量执行sym

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

.to_sym
将获取
日期的值
,并将其转换为
:mon21

,详细说明您的搜索。您正在尝试查找列名称“mon21”设置为true?的用户,详细说明您的搜索。您正在尝试查找列名称“mon21”设置为true的用户吗?