find_or_initialize_by не устанавливает первичный ключ (: id) - PullRequest
0 голосов
/ 20 марта 2012

Я пытаюсь сравнить данные в моей базе данных со списком, который я получаю от службы. Я использую find_or_initialize_by, потому что я хочу создать элемент, если он не существует и , если он существует, я хочу обновить значение, прежде чем сохранить его. Итак, вот блок кода, который я написал до сих пор:

        linkedin_client.groups.each do |group|
       linkedin_group =
       linkedin_groups.find_or_initialize_by_group_id(group.id) do |g|
         g.group_name = group.group.name
         g.membership_state = group.membership_state.code
       end # find_or_create

       # update membership status in case the group already existed
       linkedin_group.membership_state = group.membership_state.code
       # persist the group
       #linkedin_group.valid? ? linkedin_group.save! : linkedin_group.destroy
       linkedin_group.save!

Когда я запускаю это, я получаю ошибку Validation failed: Id can't be blank. У меня вопрос, как мне установить первичный ключ (т.е. идентификатор) при инициализации? Я что-то пропустил в миграции, которая создала таблицу?

Спасибо!

РЕДАКТИРОВАТЬ: ОК, я понял, что было не так. Я добавил validates :id, :presence => true в модель LinkedinGroup. Снял эту проверку и все хорошо.

...