在Rails中使用数据库列别名时的NoMethodError

时间:2012-12-20 16:18:20

标签: ruby-on-rails ruby postgresql activerecord alias

当我尝试使用聚合的列别名(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

然后我看到:#&lt; Array:0x104d08478&gt;

的未定义方法`failed_logins'

2 个答案:

答案 0 :(得分:2)

发生错误是因为find_by_sql返回一个数组,因此您需要编写f.first.failed_logins.to_s而不是f.failed_logins.to_s。 查看find_by_sql doc here

答案 1 :(得分:1)

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

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

f.map(&:destroy)

您可以使用f.count

获取实际计数

我错过了什么吗?