нужна помощь в ремонте уникального ключа в рельсах.rails добавляет идентификатор, вызывающий дубликат ключа - PullRequest
0 голосов
/ 26 апреля 2010

Мне нужна помощь в устранении проблемы ниже. У меня были блоки транзакций в моем коде рельсов, как показано ниже:

@sqlcontact =  "INSERT INTO contacts (id,\"cid\", \"hphone\", mphone, provider, cemail, email, sms , mail, phone) VALUES ('"+@id1+"','" + @id1  + "', '"+ params[:hphone] + "', '"+params[:mphone]+ "', '" + params[:provider] + "', '" + params[:cemail]+ "', '" +      @varemail+ "', '"+@varsms+ "', '"+ @varmail+"', '"+@varphone+"')"

мое приложение было развернуто на heroku, поэтому мне посоветовали удалить блоки транзакций. Поэтому я изменил вышеприведенное на:

@cont = Contact.new(:id => @id1, :cid => @id1, :hphone => params[:hphone], :mphone => params[:mphone], :provider => params[:provider], :cemail => params[:cemail], :email => @varemail, :sms => @varsms, :mail => @varmail, :phone => @varphone)
@cont.save

В моем приложении уже сохранены данные.

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

дубликат значения ключа нарушает уникальный ограничение "contacts_pkey"

Ошибка также показывает, что SQL-запрос пытается вставить данные ... однако в этом SQL-запросе я не вижу значения id. Как вы можете видеть из моего кода, я передаю идентификатор. тогда почему рельсы не принимают это? всегда ли он включает свой собственный последовательный идентификатор? я не могу перезаписать магии рельсов по умолчанию? и если он это делает ... он не смотрит на данные, которые уже находятся в БД ??

Я действительно застрял здесь. Что я должен делать? я должен просто вернуться к блоку транзакций

1 Ответ

0 голосов
/ 26 апреля 2010

Вы присваиваете свой: id вручную, вы не должны этого делать, менеджер базы данных сделает это за вас.

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