如何将对象`id`存储在迁移文件中?

时间:2011-06-30 07:31:12

标签: ruby-on-rails database ruby-on-rails-3 migration

我正在使用Ruby on Rails 3.0.7和MySQL 5.1。我想强制将对象id存储在迁移文件中。例如,我有这个:

User.create!(
  :name => 'Test name'
)

但我想做这样的事情:

User.create!(
  :id   => '12345', # Force to store the object data with id '12345'
  :name => 'Test name'
)

注意:上述代码不会强制数据库中的id值。

有可能吗?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:3)

您无法批量指定受限制的字段,例如id。但你可以单独设置它们:

user = User.new(:name => 'Test name')
user.id = 12345
user.save!

User.create!(:name => 'Test name') do |user|
  user.id = 12345
end

答案 1 :(得分:0)

您确实可以批量分配受保护的字段。这是怎么做的。在您的模型中定义以下内容:

def attributes_protected_by_default
  default = [ self.class.inheritance_column ]
end

你在这里做的是覆盖基本方法:

# The primary key and inheritance column can never be set by mass-assignment for security reasons.
def self.attributes_protected_by_default
  default = [ primary_key, inheritance_column ]
  default << 'id' unless primary_key.eql? 'id'
  default
end

...仅包含inheritance_columnid列之外的primary_key。此时,您现在可以为该模型批量分配ID。