Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将对象'id'存储在迁移文件中?_Ruby On Rails_Database_Ruby On Rails 3_Migration - Fatal编程技术网

Ruby on rails 如何将对象'id'存储在迁移文件中?

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值 可能吗?如果是,

我正在使用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 = 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-为什么这样问?