gpt4 book ai didi

ruby-on-rails - Rails/ActiveRecord Model.Find 返回错误记录

转载 作者:行者123 更新时间:2023-12-03 18:54:55 24 4
gpt4 key购买 nike

这是最古怪的。

当我访问时:

/ingredients/14.json

我明白了
{ id: 13,
name: "Tomato",
category: "Vegetable",
created_at: "2013-11-20T04:35:36.704Z",
updated_at: "2013-11-20T05:59:34.444Z"
}

在日志中:
Started GET "/ingredients/14.json" for 127.0.0.1 at 2013-11-19 22:02:35 -0800
Processing by IngredientsController#show as JSON
Parameters: {"id"=>"14"}
Ingredient Load (0.4ms) SELECT "ingredients".* FROM "ingredients" WHERE (14) LIMIT 1
#<Ingredient id: 13, name: "Tomato", category: "Vegetable", created_at: "2013-11-20 04:35:36", updated_at: "2013-11-20 05:59:34">
Completed 200 OK in 18ms (Views: 0.2ms | ActiveRecord: 0.6ms)

数据库中只有两个项目,#13(番茄)和#14(鸡蛋)。

我正在使用:
  • rails 4.0.0
  • SQLite (这是一个全新的应用程序:)
  • ActiveModel::Serializers(虽然我在删除 gem 和序列化程序时发现了相同的结果)
  • 粉末(但在 powder restart 之后继续!)
  • Batman.js(但当我使用浏览器访问 URL 时, bat 侠请求 JSON 时会发生这种情况)
  • Chrome(虽然它也发生在 Safari 和 Chrome Incognito 中)

  • 我不知道这可能是什么?有什么猜测吗?!

    更新

    只是我是个白痴。查看我的错误 Controller 操作代码:
      def show
    @resource = @class.find_by(params[:id])
    respond_with @resource
    end

    当然,这应该是:
      def show
    @resource = @class.find(params[:id])
    respond_with @resource
    end

    谢谢!

    最佳答案

    是的,您生成的 SQL 是错误的。生成的查询是:

    SELECT "ingredients".* FROM "ingredients" WHERE (14) LIMIT 1

    而它应该是:
    SELECT "ingredients".* FROM "ingredients" WHERE id = 14 LIMIT 1

    由于第一个 where 子句中的条件始终为真,它随机选取 1 行。选择哪一行取决于您的 DBMS 如何在内部存储数据。

    要知道为什么生成的查询是错误的,我们需要查看 Controller 操作中的代码。

    关于ruby-on-rails - Rails/ActiveRecord Model.Find 返回错误记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20088781/

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