在rails helper方法中使用变量列名,其中()查询

时间:2012-04-25 05:50:56

标签: 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')

我的问题是,当我在day中使用where()时,rails会假设我正在搜索名为day的列,而不是输出我在&#39}中的值; m传入我的方法。

当然,我忘了什么,对吧?

2 个答案:

答案 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