当我尝试使用聚合的列别名(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'答案 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
我错过了什么吗?