Проблема с именем поля, имеющим '?' - PullRequest
2 голосов
/ 05 июля 2011

У меня есть таблица 'user' с именем поля 'process_salary?' который имеет логический тип данных

@user = User.create(params[:user])
if @user.process_salary? 
 //some code here 
else
 //some code here 
end

Когда я создаю новый объект пользователя и проверяю process_salary, он выдает мне следующую ошибку

NoMethodError: undefined method `process_salary?' for #<User:0xb6ac2f68>

Почему возникает эта ошибка? Могу ли я избежать этого, не меняя название столбца?

Когда я проверяю его с помощью отладчика, он падает в первый раз, но после этого он работает правильно

Ответы [ 2 ]

5 голосов
/ 05 июля 2011

Знак вопроса имеет особое значение в ActiveRecord.Его можно использовать для проверки, является ли поле истинным.Вы используете его как часть названия вашего поля, что было не очень хорошей идеей.Вы можете попробовать, если @ user.process_salary ??существует, но я думаю, что в конечном итоге проще всего изменить столбец базы данных, чтобы он назывался «process_salary».

Примечание: «Рельсовая консоль» действительно полезна для игры с моделями.

1 голос
/ 05 июля 2011

Как уже сообщал cellcortex, вопросительные знаки в конце имен столбцов хитры в Rails.Если вам нужно иметь его там по старым причинам, вы можете получить доступ к атрибуту следующим образом:

@user['process_salary?']

или более подробный:

@user.read_attribute['process_salary?']

Конечно, вы можете проверитьноль, используя .nil?.

...