Путь в рельсах - PullRequest
       43

Путь в рельсах

2 голосов
/ 27 января 2011

Это очень просто, но не работает. Я хочу добавить функцию обратного вызова (after_save) для ввода в поле ввода.

В моей модели у меня есть:

after_save :upcase_tax_label

def upcase_tax_label
   self.tax1_label.upcase!
   self.tax2_label.upcase!
end

Так что, когда я редактирую, он должен подчеркивать значение и отображать его в CAPS. но нет. В чем дело? Спасибо за вашу помощь

Ответы [ 2 ]

3 голосов
/ 20 июля 2011

after_save будет запускать методы upcase после того, как модель уже сохранена в базе данных.Другими словами, он просто увеличивает атрибуты объекта в памяти после того, как сохранение уже завершено.Это не то, что вам нужно.

Вместо этого вы хотите использовать before_save, чтобы атрибуты были переданы в регистр перед записью объекта в базу данных:

before_save :upcase_tax_label

private
def upcase_tax_label
   tax1_label.upcase!
   tax2_label.upcase!
end

Суть в том, что у вас естьявно сохранить модель для внесения изменений в базу данных.До этого вы просто играете с объектом в памяти.

1 голос
/ 10 января 2014
before_save 

будет работать. тем не менее, в этой ситуации обычно лучше писать собственный установщик. это будет выглядеть примерно так:

def tax1_label=(val)
  write_attribute(:tax1_label, val.upcase)
end

def tax2_label=(val)
  write_attribute(:tax2_label, val.upcase)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...