>我有一个非常奇怪的问题,我的部分代码在本地主机上正常工作,但是当我推送到 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
方法并不完全相等(但是,根据文档,我认为在这种情况下它们应该具有相同的行为)。