Ruby on rails 如何将对象'id'存储在迁移文件中?
我正在使用RubyonRails3.0.7和MySQL5.1。我想强制将对象Ruby on rails 如何将对象'id'存储在迁移文件中?,ruby-on-rails,database,ruby-on-rails-3,migration,Ruby On Rails,Database,Ruby On Rails 3,Migration,我正在使用RubyonRails3.0.7和MySQL5.1。我想强制将对象id存储在迁移文件中。例如,我有: User.create!( :name => 'Test name' ) 但我想这样做: User.create!( :id => '12345', # Force to store the object data with id '12345' :name => 'Test name' ) 注意:上述代码不会强制数据库中的id值 可能吗?如果是,
id
存储在迁移文件中。例如,我有:
User.create!(
:name => 'Test name'
)
但我想这样做:
User.create!(
:id => '12345', # Force to store the object data with id '12345'
:name => 'Test name'
)
注意:上述代码不会强制数据库中的id
值
可能吗?如果是,如何分配?您不能批量分配受限制的字段,如
id
。但您可以单独设置它们:
user = User.new(:name => 'Test name')
user.id = 12345
user.save!
或
User.create!(:name => 'Test name') do |user|
user.id = 12345
end
您确实可以批量分配受保护的字段。下面是如何做到这一点。在模型中定义以下内容:
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
#出于安全原因,无法通过批量分配设置主键和继承列。
默认情况下,def self.attributes_protected_
默认值=[主键,继承列]
默认情况下,我不知道这样做是否可行,但我认为强制使用对象ID不是一个好主意。根据应用程序的设置,这可能会导致ID冲突,这可能会中断迁移。@Koraktor-我使用它在应用程序启动时设置一些默认数据。这只是初始化数据库,并确保一切按预期进行。使用rake task或db:seed作为默认数据?@Mikhail Nikalyukin-为什么这样问?