我正在使用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
值。
有可能吗?如果是这样,怎么样?
答案 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_column
或id
列之外的primary_key
。此时,您现在可以为该模型批量分配ID。