How can I store the object `id` in a migration file?
I'm using Ruby on Rails 3.0.7 and MySQL 5.1. I'd like to force to store the object id in a migration file. For example I have this:
User.create!(
:name => 'Test name'
)
but I would like to do something like this:
User.create!(
:id => '12345', # Force to开发者_Go百科 store the object data with id '12345'
:name => 'Test name'
)
Note: the above code will not force the id value in the database.
Is it possible? If so, how?
You can't mass assign the restricted fields like id. But you can individually set them:
user = User.new(:name => 'Test name')
user.id = 12345
user.save!
OR
User.create!(:name => 'Test name') do |user|
user.id = 12345
end
You can indeed mass-assign protected fields. Here's how to do it. In your model define the following:
def attributes_protected_by_default
default = [ self.class.inheritance_column ]
end
What you are doing here is overriding the base method:
# 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
...to include only the inheritance_column excluding the id, or primary_key column. At this point you can now mass-assign the ID for that model.
加载中,请稍侯......
精彩评论