0

当我尝试对聚合使用列别名时出现未定义的方法错误(PostgreSQL)

在我的模型里面:

class B2bLoginAttempt < ActiveRecord::Base
  set_table_name "b2b_logins"
end

在我的控制器内部:

    @client_ip = request.env['REMOTE_ADDR']
    @sql = "select count(id) as failed_logins FROM b2b_logins WHERE ip_address = '"+@client_ip+"'"

    f = B2bLoginAttempt.find_by_sql(@sql)
    failed_attempts = f.failed_logins.to_s
    f.destroy

然后我看到:#<Array:0x104d08478> 的未定义方法 `failed_logins'

4

2 回答 2

2

发生错误是因为find_by_sql返回一个数组,所以你需要写f.first.failed_logins.to_s而不是f.failed_logins.to_s. 在这里查看find_by_sql文档。

于 2012-12-20T16:26:31.320 回答
1

不确定我是否完全正确地遵循了你的逻辑,但看起来你可能会更好:

f = B2bLoginAttempt.where("ip_address = ?", @client_ip)

f.map(&:destroy)

你可以得到实际的计数f.count

我错过了什么?

于 2012-12-20T16:44:03.900 回答