gpt4 book ai didi

mysql - 错误未定义局部变量或方法 `created_at'

转载 作者:太空宇宙 更新时间:2023-11-03 12:15:12 28 4
gpt4 key购买 nike

我编写查询以了解用户在一周内减少了多少卡路里,但出现此错误。

如何避免错误?

def self.calories_burned(current_user)
week = ((created_at - current_user.first_program_started_at.utc.beginning_of_day) / 86400 / 7).ceil.to_i || 1
find_by_sql("
SELECT
count(*) as cnt,
WEEK(#{week}) as week_number
FROM
user_daily_updates
WHERE
user_id=#{current_user.id}
GROUP BY
week_number
")
end

最佳答案

当你这样写的时候:

def self.calories_burned(current_user)
etc...
end

这是一个只能这样调用的方法:

MyUserModel.calories_burned(some_user)

在这种情况下,您在实例化之前在类上运行代码,这意味着模型甚至没有将自身附加到数据库连接,因此您将无法访问相关属性到你的模型。

另一方面,如果你这样写:

def calories_burned
etc...
end

您不需要将用户传递给该方法,您只需在实例化您的模型后在 Controller 上调用它,如下所示:

id = 123
current_user = MyUserModel.find(id)
current_user.calories_burned

current_user.calories_burned 将根据当前用户返回您要查找的值。

仔细查看您的方法后

它应该看起来更像这样:

def calories_burned
week = ((created_at - first_program_started_at.utc.beginning_of_day) / 86400 / 7).ceil.to_i || 1
UserDailyUpdate.where(["user_id = ?", id]).where(["week = ?",week]]).count(:all, :group => 'week_number')
end

如果我正确理解了您尝试对查询执行的操作,那么您应该会得到相同的结果。现在,我应该提一下,我假设当您创建表 user_daily_updates 时,您还创建了一个模型 UserDailyUpdate。

你应该看看ActiveRecord's documentation for searching using conditions (第 2 部分的所有部分)以便更好地理解我刚刚所做的事情。

关于mysql - 错误未定义局部变量或方法 `created_at',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22529950/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com