Метод создания Rails не добавляет запись в таблицу, но работает для IRB - PullRequest
1 голос
/ 01 декабря 2011

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

Мой контроллер имеет это:

def add_upc
        @upcs = Dvd.add_upc(params[:dogTag], params[:newUpc])
    end

ив модели у нас есть:

def self.add_upc(dogTag, newUpc)
    existingUpc = Dvd.find(dogTag).dvd_upc2title.find_by_upc(newUpc)
    if existingUpc.nil? 
        createdUpc = Dvd.find(dogTag).dvd_upc2title.create(:upc => newUpc)
        if createdUpc
            upcs = createdUpc
        else
            upcs = 'Error: nothing was created'
        end
    end
end

Я настроил страницу просмотра, чтобы увидеть, что происходит, и я могу видеть объект, созданный созданным с помощью UPU.Я также могу подтвердить, что параметры dogTag и newUpc передаются правильно.Тем не менее, запись не добавляется в таблицу.

Странно, это работает, если я ввожу команду Dvd.find(dogTag).dvd_upc2title.create(:upc => newUpc) со значениями, заменяемыми переменными из IRB.

Не могу понять, почему это не работает.Я новичок в Rails, поэтому не знаю, какие еще ошибки можно использовать, чтобы выяснить, в чем проблема.

Идеи приветствуются.

Спасибо.

Редактировать:

Обнаружил ошибку благодаря RyanWilcox, это была проверка, которую я настроил в контроллереза то, что UPC сказал мне, что значение уже существует (даже если предполагается, что UPC уникальны. Есть ли способ проверки по комбинации из 2 полей?

1 Ответ

1 голос
/ 02 декабря 2011

Что мне действительно нравится делать в подобных ситуациях («почему это не удалось сохранить?») - это использовать create! вместо create.

Это приведет к возникновению исключения при ошибке с текстом неудачной проверки в качестве сообщения об исключении. Это делает такие проблемы очевидными.

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