Ruby on rails - has_many关系适用于本地主机,但不适用于服务器(Heroku)



>我有一个非常奇怪的问题,我的部分代码在本地主机上正常工作,但是当我推送到 heroku 时,它的工作方式不同

class Box < ActiveRecord::Base
    has_many :items
end
class Item < ActiveRecord::Base
    belongs_to :box
end
class ItemsController < ApplicationController
    def put_in_box
        i = Item.find params[:item_id]
        b = Box.find params[:box_id]
        b.items << i
    end
end

这才是真正让我困惑的地方

这是来自本地服务器的日志

Box Exists (0.6ms)  SELECT "boxes.*" FROM "boxes" WHERE ("boxes"."id" = $1) LIMIT 1 [["box_id", "1"]]
Item Exists (0.6ms)  SELECT "items.*" FROM "items" WHERE ("items"."id" = $1) LIMIT 1 [["box_id", "2"]]
UPDATE "items" SET "box_id" = $1, "updated_at" = $2 WHERE "items"."id" = 1  [["box_id", 1], ["updated_at", Tue, 16 Jun 2015 09:07:46 UTC +00:00]]

但是!这是来自 Heroku 服务器的日志

Box Exists (0.6ms)  SELECT "boxes.*" FROM "boxes" WHERE ("boxes"."id" = $1) LIMIT 1 [["box_id", "1"]]
Item Exists (0.6ms)  SELECT "items.*" FROM "items" WHERE ("items"."id" = $1) LIMIT 1 [["box_id", "2"]]
UPDATE "items" SET "updated_at" = $1 WHERE "items"."id" = 10  [["updated_at", Tue, 16 Jun 2015 09:15:41 UTC +00:00]]

这些日志来自相同的方法,相同的代码片段,但行为不同(来自Heroku服务器的日志不会box_id更新)。

你知道是什么原因造成的吗?

(对不起,如果这是一个愚蠢的问题,我不是真正的 Rails 开发人员,所以我不知道这如何以及为什么不起作用)

这是数据库.yml

development:
  adapter: postgresql
  database: app_dev
  host: localhost
test:
  adapter: postgresql
  database: appo_test
  host: localhost

最后

不知何故,在手动将父级分配给子级时,<<操作数不起作用

i.box = b
i.save

我现在使用上面的代码在本地主机和 Heroku 上让它工作,但仍然想知道为什么<<不起作用

根据 Heroku 日志,该行似乎b.items << i什么都不做,因为在数据库中更新项目时,该项目的 box_id 属性不会出现。

这让我想起了我在类似情况下遇到的一个奇怪的问题,<<运算符什么也没做(也没有错误),只需用push替换它就可以解决问题,所以也许你可以尝试一下:b.items.push i

<<运算符和push方法并不完全相等(但是,根据文档,我认为在这种情况下它们应该具有相同的行为)。

最新更新