Rails 3的捐赠和错误保存模型到mysql数据库后
问题描述:
得到使用Rails 3Rails 3的捐赠和错误保存模型到mysql数据库后
class Picture < ActiveRecord::Base
end
,当我尝试
Picture.create :content_type => :test
我得到
TypeError: can't convert nil into Integer
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:318:in `uniq'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:318:in `commit_transaction_records'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:165:in `transaction'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.4/lib/active_record/transactions.rb:207:in `transaction'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.4/lib/active_record/transactions.rb:290:in `with_transaction_returning_status'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.4/lib/active_record/transactions.rb:240:in `save'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.4/lib/active_record/transactions.rb:251:in `rollback_active_record_state!'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.4/lib/active_record/transactions.rb:239:in `save'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.4/lib/active_record/base.rb:498:in `create'
from (irb):4
而这一随机误差是我的迁移看起来像
class CreatePictures < ActiveRecord::Migration
def self.up
create_table :pictures do |t|
t.string :title
t.string :content_type
t.string :url
t.float :lat
t.float :long
t.string :hash
t.timestamps
end
end
def self.down
drop_table :pictures
end
end
但数据实际上得到保存?任何想法
答
是否使用数据库记录创建ID字段?看起来ID字段是唯一的整数,它可能不会在创建时正确返回。
答
您的问题是由于在模型中使用保留字'散列'造成的。尽管我经常难以记住这一点,但一条简单的规则是,在任何Ruby的保留字之后都不要命名列。
如果您正在使用MD5哈希或您的照片,应将列'hash'重命名为'md_hash'。