Hancurkan kesalahan tidak ditampilkan dalam pesan flash.
Terjadi ketika model didefinisikan dengan has_many
dengan restrict_with_error
seperti itu:
class User
has_many :orders, dependent: :restrict_with_error
..
end
Kode berikut dapat memperbaikinya, tetapi menurut saya ini harus menjadi perilaku default:
after_destroy :check_model_errors
controller do
def check_model_errors(object)
return unless object.errors.any?
flash[:error] ||= []
flash[:error].concat(object.errors.full_messages)
end
end
Penanganan/penampilan kesalahan bukan bagian dari AA, ini adalah bagian dari InheritedResources
@kaspernj , saya menemukan ini dapat dicapai dalam ActiveAdmin melalui terjemahan I18n dan menyesuaikan Opsi Interpolasi Responder di controller.
Menambahkan metode #interpolation_options
ke ActiveAdmin::BaseController
dalam penginisialisasi:
# config/initializers/active_admin.rb
class ActiveAdmin::BaseController
private
def interpolation_options
options = {}
options[:resource_errors] =
if resource && resource.errors.any?
"#{resource.errors.full_messages.to_sentence}."
else
""
end
options
end
end
Kemudian ganti terjemahan untuk pesan peringatan penghancuran di file lokal:
# config/locales/en.yml
en:
flash:
actions:
destroy:
alert: "%{resource_name} could not be removed. %{resource_errors}"
Solusi oleh @zorab47 bagus tapi jangan menutupi evenience ketika kami mencoba untuk menghancurkan objek bersarang (accept_nested_attributes dalam model dan f.has_many(:resources, allow_destroy: true) di activeadmin).
Sebagai _experimental monkey patch_ saya menambahkan berikut ini di config/initializers/active_admin.rb:
ActiveAdmin::ResourceController::DataAccess.module_eval do
def update_resource(object, attributes)
if object.respond_to?(:assign_attributes)
object.assign_attributes(*attributes)
else
object.attributes = attributes[0]
end
begin
run_update_callbacks object do
save_resource(object)
end
rescue ActiveRecord::RecordNotDestroyed => e
flash[:error] = "Cannot destroy nested object."
object.errors.add(:base, e.to_s)
end
end
end
Komentar yang paling membantu
@kaspernj , saya menemukan ini dapat dicapai dalam ActiveAdmin melalui terjemahan I18n dan menyesuaikan Opsi Interpolasi Responder di controller.
Menambahkan metode
#interpolation_options
keActiveAdmin::BaseController
dalam penginisialisasi:Kemudian ganti terjemahan untuk pesan peringatan penghancuran di file lokal: