#ruby-on-rails #ruby #activerecord
#ruby-on-rails #ruby #activerecord
Вопрос:
Я заметил, что одно из моих полей модели не будет обновляться через мое приложение в браузере после того, как оно было изначально установлено. Когда я начал исследовать это, я обнаружил, что поле было объявлено только через пользовательский валидатор:
validate :amount_validator
def amount_validator
if self.amount == nil
errors.add(:amount, "Please fill in the amount.")
end
end
Я думал, что проблема в том, что это отсутствует:
validates :amount, presence: true
Я добавил это, но все равно не смог обновить поле через браузер. Когда я сохранил значение и страница обновилась, оно вернулось к исходному значению. Я прочитал другой вопрос SO, в котором указывалось, что я должен попробовать обновить это поле через консоль и посмотреть, были ли какие-либо ошибки. Я сделал это, он работал без ошибок. Вернулся в браузер, и значение изменилось, но я все еще не мог обновить его через браузер. Спасибо за вашу помощь.
Комментарии:
1. Просто обратите внимание на консоль, на которой вы запустили сервер, какое сообщение об ошибке он печатает .. или *.log файл…
2. Можете ли вы проверить в журналах или консоли браузера передаваемые параметры? Отправляется ли значение для этого поля?
3. Ошибки нет, оно обнаруживает изменение (и новое значение), кажется, фиксирует его, но значение фактически не меняется.
4. Какую версию Rails вы используете? Если Rails 4, добавили ли вы его в разрешенные атрибуты в своих строгих параметрах?
Ответ №1:
В зависимости от того, какую версию rails вы используете, ошибка может быть связана с доступными атрибутами (Rails 3) или сильными параметрами (Rails 4).
В Rails 3 убедитесь, что это есть в вашей модели:
attr_accessible :amount
В Rails 4 убедитесь, что вы разрешаете атрибут в хэше, который вы передаете update_attributes
в своем контроллере:
your_model.update_attributes(params.require(:your_model_name).permit([:amount]))