当id为false时,rails migration update_attributes bug

时间:2014-11-27 03:47:07

标签: ruby-on-rails-4 update-attributes

这里我描述了rails 4.1.6中潜在的错误

创建没有id的表

def change
    create_table :tests, id:false do |t|
    ......
end

update_attributes函数将失败

例如,在控制台

> a=Test.first
=> #<Test symbol: "ABC", month: 3, year: 14>
> b={"symbol"=>"EFG", "month"=>"4", "year"=>"15"}
.... 
> a.update_attributes(b)
TypeError: nil is not a symbol
.......

详细检查显示这是由自动插入Test的附加字段“nil =&gt; nil”引起的。例如

> a.attributes
=> {"symbol"=>"ABC", "month"=>3, "year"=>14, nil=>nil}

nil =&gt; nil字段也在新记录的属性中生成。例如

> b=Test.new
=> #<Test symbol: nil, month: nil, year: nil>
> b.attributes
=> {"symbol"=>nil, "month"=>nil, "year"=>nil, nil=>nil}

BYW,我正在使用mysql。当id:false被删除时,上述问题不存在

1 个答案:

答案 0 :(得分:1)

它需要相关表中的主键才能使Rails正常工作。创建一个迁移,将字段(例如,symbol字段)或一组字段设置为主键,然后您的代码将照常工作。