Когда я пытаюсь обновить поле со значением, содержащим '?', Update_attributes возвращает:
**NoMethodError**
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.reverse
Мой контроллер может:
- Создать запись с помощью '?' как имя поля.
- Редактировать / сохранить запись, если поле содержит '?' оставлено без изменений
- Редактировать / сохранить запись, если поле содержит '?' изменен на «тест»
Не может:
- Редактировать / сохранить запись, если поле содержит «?» изменяется на «? test» или «test?»
- Редактировать / сохранить запись, если поле, содержащее «test», заменено на «?»
Я полагаю, что active_record игнорирует неизмененные поля, поэтому код работает в этом случае.
Я также вижу BEGIN и ROLLBACK в журнале, поэтому я предполагаю, что ошибка вызвана тем, что update_record не может заключить строку в кавычки перед передачей ее в базу данных. Это ошибка или я должен явно указывать ввод данных?
Мой метод обновления:
def update
@interface = Interface.find(params[:id])
if @interface.update_attributes(params[:interface])
redirect_to :action => 'show', :id => @interface.id
else
redirect_to :action => 'edit'
end
end
Модель пуста.
Использование update_attributes !, сообщение (редактировать, все еще):
NoMethodError in Admin::InterfacesController#update
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.reverse
Извините, ошибка ArgumentError, о которой я упоминал, не имеет значения.
Оригинальная трассировка стека: http://pastebin.com/JQ3Cmrba
ИСПРАВЛЕНО путем возврата к рельсам 3.0.7 и mysql 0.2.7.
Возможная причина:
'username' и 'password' - это поля в таблице интерфейса. Interface_controller наследуется от base_controller:
class Admin::BaseController < ApplicationController
layout 'admin'
before_filter :authenticate
def index
end
protected
def authenticate
authenticate_or_request_with_http_basic do |username, password|
if username == 'test' and password == 'pass'
true
else
false
end
end
end
end