Проверьте, была ли изменена ячейка в массиве ActiveRecord - PullRequest
0 голосов
/ 20 сентября 2018

Я использую PostgreSQL, который поддерживает массивы, что очень удобно.Иногда мне нужно посмотреть, был ли элемент изменен.

Я знаю, что мы можем сделать это:

MyActiveRecordArray.changed?
=> true

Но есть лиспособ сделать это:

MyActiveRecordArray[0].changed?

Спасибо за ваши ответы и помощь!

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Вот решение, которое я приду, благодаря вашему ответу

changes_index = []  
old_array, new_array  = model.changes['array_field']  
new_array.each_with_index { |x, i| changes_index << i if x != old_array[i] }
0 голосов
/ 20 сентября 2018

Вы можете напрямую спросить ваш экземпляр ActiveRecord, изменился ли конкретный атрибут, используя метод attribute_name_changed?.

В вашем случае:

MyModel.active_record_array_changed?

Это вернет true или false в зависимости от того, изменился ли конкретный атрибут.

0 голосов
/ 20 сентября 2018

Хотя вы не можете сделать это напрямую, вы можете использовать метод changes:

model = Model.new
model.array_field = [1]
model.changed?
=> true
model.changes['array_field'] 
=> [[], [1]]

doc: https://api.rubyonrails.org/classes/ActiveModel/Dirty.html#method-i-changes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...