【发布时间】:2014-10-05 04:42:34
【问题描述】:
我正在使用带有 postgres 后端的 rails 4.1 工作,由 'pg' gem (0.17.1) 处理。当我尝试更新和保存一些普通整数/字符串字段时,更改 似乎 成功但不会写入数据库。任何地方都没有抛出任何错误(我发现)。
架构摘录如下:
enable_extension "plpgsql"
create_table "widgets", force: true do |t|
t.string "id"
t.integer "recipient"
t.datetime "receivedAt"
end
在 Rails 控制台中:
w = Widget.find('14b13b1e')
=> #<Widget id: "14b13b1e", receivedAt: nil, created_at: "2014-10-04 17:10:39", updated_at: "2014-10-04 17:10:39">
w.receivedAt = Time.now()
=> 2014-10-04 19:39:33 +0100
w.save()
=> # database commit runs and returns 'true'
Widget.find('14b13b1e')
=> #<Widget id: "14b13b1e", receivedAt: nil, created_at: "2014-10-04 17:10:39", updated_at: "2014-10-04 17:10:39">
我也尝试过使用 Widget.update、Widget.update_attribute() 和 Widget.receivedAt_will_change!()。在每种情况下,我都会得到相同的结果。没有错误可见:
w.errors.messages
=> {}
我尝试更改的所有字段都会发生这种情况。
我还能在哪里查找错误?
编辑:抱歉,我编辑了 randID,因为它是很多无用的文本,并且忘记编辑一个匹配项。固定。
我还忘了提到我使用的是非标准主键。在我的小部件模型中,我有
self.primary_key = "randID"
Widgets 仍然有一个普通的 'id' 字段,但它只能通过 Widget['id'] 访问(因为 Widget.id 现在返回 randID)。我在选择小部件时没有遇到任何问题。
【问题讨论】:
-
为什么
id会发生变化?您正在寻找'14b13b1e',但得到'14b13b1e4db5c9cb58bdb26157bee89be6ae494a'。你的Widget班级是什么样的? -
对不起;编辑问题以澄清:我只是删除了一些字符串以简化问题,并忘记剪辑最后一次出现。固定!
标签: ruby-on-rails ruby postgresql