您好!
当我在rails 3.1中保存模型时发生了一件非常奇怪的事情。
开发/生产中的相同项目
有一个简单的模型城市有2个字段(名称/州)。
开发控制台
city = City.new(:name => "Sao Paulo", :uf => "SP")
city.save (true, no validations errors and record is created in database)
如果我打电话给" city.id",我会获得保存在数据库中的ID的真实价值,例如123.
它在发展方面做得很好。
生产控制台
city = City.new(:name => "Sao Paulo", :uf => "SP")
city.save (true, no validations errors and record is created in database)
如果我打电话给" city.id",我得到的值等于0(与数据库中自动创建的值不同)
City.last (check if record is created in database...)
<City id: 22257, name: "Sao Paulo", uf: "SP", created_at: "2011-11-23 00:52:53", updated_at: "2011-11-23 00:52:53">
记录在数据库中创建,但在调用save / create后不返回ID。有没有人看过这个?这是我第一次在生产中看到这种行为。它适用于项目中的每个模型。我使用模型城,因为它是最简单的 我正在运行rails 3.1。
感谢您的帮助!
答案 0 :(得分:1)
city.id = 0
不会对您的数据库执行任何操作,它只会修改您拥有City
的实例,以便将其实际写入您的数据库,之后您应该在实例上使用.save
改变其属性。
同样手动设置自动增量唯一sql列的值似乎要求发生不好的事情。
另外我认为id从1开始而不是0,试图将它设置为0可能不会被MySQL接受。
答案 1 :(得分:1)
我找到了解决方案!我正在使用'mysql'gem insted'mysql2'。当我改为mysql2(在Gemfile和database.yml适配器中)时,一切正常。这可能是gem'mysql'和rails 3.1之间的不兼容问题。谢谢大家的帮助!