has_many关系适用于localhost但不适用于服务器(Heroku)

时间:2015-06-16 09:46:21

标签: ruby-on-rails ruby-on-rails-4 activerecord

我有一个非常奇怪的问题,我的部分代码在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;不工作

1 个答案:

答案 0 :(得分:1)

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

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

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