Как я могу сохранить объект `id` в файле миграции? - PullRequest
1 голос
/ 30 июня 2011

Я использую 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 ]

3 голосов
/ 30 июня 2011

Вы не можете массово назначить ограниченные поля, такие как id.Но вы можете установить их индивидуально:

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

ИЛИ

User.create!(:name => 'Test name') do |user|
  user.id = 12345
end
0 голосов
/ 01 июля 2011

Вы действительно можете массово назначать защищенные поля. Вот как это сделать. В вашей модели определите следующее:

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 этой модели в массовом порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...