我有一个非常奇怪的问题,我的部分代码在localhost上正常工作但是当我推送到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开发者,所以我不知道这是怎么回事以及为什么不起作用)
这是database.yml
development:
adapter: postgresql
database: app_dev
host: localhost
test:
adapter: postgresql
database: appo_test
host: localhost
最后
不知何故,这是&lt;&lt;操作数在手动为子项工作分配父项时不起作用
i.box = b
i.save
我现在使用上面的代码在localhost和Heroku上工作,但仍然很想知道为什么&lt;&lt;不工作
答案 0 :(得分:1)
基于Heroku日志,似乎行b.items << i
什么都不做,因为在数据库中更新项目时,项目的box_id
属性不会出现。
这让我想起了我在类似情况下遇到的一个奇怪的问题,<<
运算符什么也没做(并且没有错误),只需用push
替换它就解决了问题,所以也许你可以尝试:b.items.push i
<<
运算符和push
方法并不完全相等(但是,基于文档,我认为在这种情况下它们应该具有相同的行为)。