В спецификации Global Platform нет механизма, соответствующего вашим потребностям. Ваши две возможности, которые я вижу:
SecureChannel.processSecurity()
, чтобы перенаправить процесс аутентификации в домен безопасности SecureChannel.getSecurityLevel()
Оказывается, что это испускало неправильный SQL. В основном это искало объект QuestionMembeship идентификационным столбцом, который не существует.
У меня создалось впечатление, что тот столбец был ненужным с has_many_through отношениями, хотя кажется, что я был дезинформирован.
Для фиксации я просто добавил идентификационный столбец к таблице как первичный ключ. Спасибо за все указатели.
Вы не можете находить объект, что Вы думаете, что Вы. Некоторое экспериментирование в irb могло бы быть поучительным.
Кроме того, как правило при изменении только одного атрибута, лучше записать
qm.update_attribute(:position, x)
вместо того, чтобы установить и сохранить. Направляющие затем обновят только что столбец вместо всей строки. И Вы также извлекаете пользу из вычищаемых данных.
В журнале разработки можно на самом деле видеть sql, который сгенерирован.
Для чего-то вроде этого:
qm = QuestionMembership.find(:first, :conditions => ["question_id = ? AND form_id = ?", q_id, form_id])
qm.position = x
qm.save
Необходимо видеть что-то к эффекту:
SELECT * FROM question_memberships WHERE question_id=2 AND form_id=6 LIMIT 1
UPDATE question_memberships SET position = x WHERE id = 5
Можно ли произвести, какой sql Вы на самом деле видите, таким образом, мы можем выдержать сравнение?
Из чего результат qm.save
? TRUE или FALSE? И что относительно qm.errors
, это обеспечивает что-нибудь, что имеет смысл Вам? И что говорит development.log?
Попытайтесь изменить qm.save на qm.save! и посмотрите, получаете ли Вы сообщение об исключении.
Править: Что происходит, когда Вы наблюдаете вход в систему вызов к .save!? Это генерирует ожидаемый SQL?
Я сталкивался с этой проблемой скорее часто. (Я собирался сказать последовательно, но я не могу, поскольку это подразумевало бы, что я буду знать, когда это собиралось произойти.)
В то время как у меня нет решения базовой проблемы, я нашел, что это, кажется, происходит со мной только, когда я пытаюсь обновить mysql text
поля. Мое обходное решение должно было установить поле, чтобы сделать что-то как:
qm.position = ""
qm.save
qm.position = x
qm.save
И ответить на всех остальных..., когда я работаю qm.save!
Я не получаю ошибок. Я не попробовал qm.save?
Когда я пробегаю свой код в консоли направляющих, все работает отлично, как свидетельствуется путем перенахождения, что объект с помощью того же запроса приносит ожидаемые результаты.
У меня есть та же проблема при использовании qm.update_attribute(...
также
Мое обходное решение получило меня хромающий настолько далеко, но надо надеяться кто-то на этом потоке сможет помочь.
Используйте./script/console и запустите этот скрипт.. шаг за шагом..
посмотрите, является ли поле положения для объекта обновлением или не при выполнении строки 2
затем хит qm.save или qm.save!... протестировать
посмотрите то, что происходит. Также, как упомянуто Tim.. проверьте журналы
Проверьте, чтобы удостовериться, что Ваши настройки базы данных корректны. Если Вы работаете с несколькими базами данных (или не изменили значение по умолчанию sqlite3 база данных к MySQL), можно работать с неправильной базой данных.
Выполните команды в./script/console, чтобы видеть, видите ли Вы то же поведение.
Проверьте, что подобный объект (говорят, что Форма или Вопрос) сохраняет.
Если Форма или Вопрос сохраняют, найдите различие между объектом Формы или QuestionMembership и Вопроса.
Проверьте свой класс QuestionMembership и проверьте, что положение не имеет чего-то как
attr_readonly :position
Лучший способ отладить это состоит в том, чтобы сделать
tail -f log/development.log
И затем откройте другую консоль и сделайте код, выполняющий оператор сохранения. Проверьте, что фактический оператор SQL Update выполняется.