Я использую виртуальные атрибуты, чтобы выделить список параметров через запятую в представлении, а затем пытаюсь рекомбинировать их для сохранения в моей модели Active Record.
Учитывая реальный атрибут "ad_columns", который по умолчанию равен "1,1,1,1"
Я разбил их на отдельные атрибуты формы:
attr_accessor :top_rows
#Getter
def top_rows
split = ad_rows.split(',', 4)
split[0]
end
#Setter
def top_rows=(trows)
ad_rows_will_change!
self.ad_rows = [trows, self.right_rows, self.bottom_rows, self.left_rows].join(",")
end
Затем повторите это для правого, нижнего, левого и правого.
Учитывая объект, если я вызываю "object.top_rows", я получаю "1", и если я обновляю его в irb:
object.top_rows = "3"
Затем он корректно обновляет реальный атрибут ad_rows. Я вижу, что у объекта есть изменения, и когда я делаю
object.save
Изменения обновляются в базе данных.
Проблема в том, что это НЕ работает с точки зрения. Это не сохранит в базу данных. Я даже использовал logger.info, чтобы увидеть, изменилась ли модель, и она покажет, что «ad_rows» действительно была изменена, но активная запись все еще НЕ обновляет реальный атрибут.
Я не могу понять, почему это происходит. Я просто делаю это неправильно? :) Спасибо.
Почему это работает в irb, а не в представлении?