在 Rails 辅助方法 where( ) 查询中使用变量列名

jos*_*ara 0 ruby ruby-on-rails ruby-on-rails-3

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

[sun20, mon21, tue22, wed23, thur24, fri25]
Run Code Online (Sandbox Code Playgroud)

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

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

  def day_confirmed(day)
    User.where(day: true).count
  end
Run Code Online (Sandbox Code Playgroud)

我可以在一天内通过其中了解当天有多少用户被确认,如下所示:

day_confirmed('mon21')
Run Code Online (Sandbox Code Playgroud)

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

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

Jor*_*ing 5

这个语法:

User.where( day: true )
Run Code Online (Sandbox Code Playgroud)

相当于:

User.where( :day => true )
Run Code Online (Sandbox Code Playgroud)

这是因为:在散列中使用 ,而不是=>,eg { 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" ]
Run Code Online (Sandbox Code Playgroud)

因此,如果您想使用变量的值day而不是符号:day作为键,请尝试以下操作:

User.where( day => true )
Run Code Online (Sandbox Code Playgroud)