Как мы можем получить только недавно добавленный объект после обновления, используя ассоциацию accepts_nested_attributes_for в rails
Моя ассоциация выглядит так:
class Abc < ApplicationRecord
has_many :def
accepts_nested_attributes_for :def, allow_destroy: true
end
class AbcController < ApplicationController
def update
abc = Abc.find(params[:id])
if abc.update(abc_params)
# TODO Here update is sucessful but how to get all newly added def in database with their id?
end
end
private
def abc_params
params.require(:abc).permit(def_attributes: [:name, :title,:wordcount, :id])
end
end
Мы знаем, что атрибуты accepts_nested создает новый вложенный объект в базе данных, так как я могу получить все вновь добавленные (еще не существующие) объекты def с их идентификатором базы данных в функции обновления AbcController?
1 ответ
Одно решение (не прямое)..
def update
abc = Abc.find(params[:id])
number_of_defs = abc.defs.length
if abc.update(abc_params)
number_newly_added_defs = abc.defs.length - number_of_defs
newly_added_defs = abc.defs.last(number_newly_added_defs)
end
end
вы получите желаемый результат.