Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 轨道4.1,第0.17.1页——can和x27;不能修改模型实例中的字段_Ruby On Rails_Ruby_Postgresql - Fatal编程技术网

Ruby on rails 轨道4.1,第0.17.1页——can和x27;不能修改模型实例中的字段

Ruby on rails 轨道4.1,第0.17.1页——can和x27;不能修改模型实例中的字段,ruby-on-rails,ruby,postgresql,Ruby On Rails,Ruby,Postgresql,我在Rails4.1中使用postgres后端,由“pg”gem(0.17.1)处理。当我尝试更新和保存一些普通整数/字符串字段时,更改似乎成功了,但没有写入数据库。没有错误被抛出任何地方(我发现) 可以在下面找到架构摘录: enable_extension "plpgsql" create_table "widgets", force: true do |t| t.string "id" t.integer "recipient" t.datetime "receivedAt"

我在Rails4.1中使用postgres后端,由“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">
我尝试更改的所有字段都会发生这种情况

我还能在哪里找到错误

编辑:对不起,我编辑了RandID,因为它有很多无用的文本,并且忘记编辑一个事件。固定的

我还忘了提到我使用的是非标准主键。在我的Widgets模型中,我有

self.primary_key = "randID"

Widget仍然有一个普通的“id”字段,但只能使用Widget['id']访问它(因为Widget.id现在返回randID)。我在选择小部件方面没有遇到任何问题。

唉。这完全是我的错。下面是我的模型文件widget.rb的摘录

class Widget < ActiveRecord::Base
    self.primary_key = "randID"
    before_save :set_randID
    belongs_to :user

    ...
end
class小部件
我在保存之前运行了一个函数来计算主键(set_randID)(而不是像我应该做的那样在创建之前只计算一次)。当我尝试更新模型的实例时,save将尝试重新计算并设置实例对象上的主键

这似乎一直在默默地失败。SQL查询看起来返回了“true”,ActiveRecord对象的错误哈希为空


所以,问题是固定的;这完全是我的错,很抱歉浪费了你的时间……但是有人知道我可以在哪里更早地注意到这一点吗?

为什么
id
在变化?您正在寻找
'14b13b1e'
但得到的是
'14b13b1e4db5c9cb58bdb26157bee89be6ae494a'
。你的
小部件
类是什么样子的?对不起;编辑问题以澄清:我只是简单地删除了一些字符串以简化问题,而忘记了剪辑最后一个事件。固定的!如果您包含了模型代码(或至少是其中的关系和回调设置部分),则在保存之前,可能会有人注意到您的
class Widget < ActiveRecord::Base
    self.primary_key = "randID"
    before_save :set_randID
    belongs_to :user

    ...
end