Tôi vừa gặp phải vấn đề tương tự vì tôi cần người dùng được đánh dấu để xóa và không bị xóa ngay lập tức.
Sau khi hack xung quanh một chút, cuối cùng tôi đã tìm thấy một cách: ghi đè hành động xóa mặc định của RailsAdmin.
Đây là hành động xóa sau khi tôi thêm mã tùy chỉnh của riêng mình (không xóa nhưng đánh dấu để xóa bằng thông báo tùy chỉnh, ẩn nút xóa nếu người dùng đã được đánh dấu để xóa). :
# config/initializers/rails_admin_delete_override.rb
module RailsAdmin
module Config
module Actions
class Delete < RailsAdmin::Config::Actions::Base
RailsAdmin::Config::Actions.register(self)
register_instance_option :member do
true
end
register_instance_option :route_fragment do
'delete'
end
register_instance_option :http_methods do
[:get, :delete]
end
register_instance_option :authorization_key do
:destroy
end
register_instance_option :visible? do
bindings[:object].class.base_class.name != 'User' || !bindings[:object].to_destroy?
end
register_instance_option :controller do
Proc.new do
if request.get? # DELETE
respond_to do |format|
format.html { render @action.template_name }
format.js { render @action.template_name, :layout => false }
end
elsif request.delete? # DESTROY
redirect_path = nil
@auditing_adapter && @auditing_adapter.delete_object(@object, @abstract_model, _current_user)
if @object.class.base_class.name == 'User'
@object.to_destroy!
flash[:success] = t("admin.flash.user_destroy_successful", :name => @model_config.label)
redirect_path = index_path
else
if @object.destroy
flash[:success] = t("admin.flash.successful", :name => @model_config.label, :action => t("admin.actions.delete.done"))
redirect_path = index_path
else
flash[:error] = t("admin.flash.error", :name => @model_config.label, :action => t("admin.actions.delete.done"))
redirect_path = back_or_index
end
end
redirect_to redirect_path
end
end
end
register_instance_option :link_icon do
'icon-remove'
end
end
end
end
end
Bạn có thể tìm thấy mã hành động ban đầu ở đây: https://github.com/sferik/rails_admin/blob/master/lib/rails_admin/config/actions/delete.rb
Nguồn
2013-09-17 09:44:01
Tôi cần phải làm điều gì đó tương tự và hy vọng tìm được giải pháp đơn giản hơn (ala Typus, nơi bạn có thể mở rộng bộ điều khiển riêng lẻ và ghi đè hành động riêng lẻ). Cảm ơn bạn đã chia sẻ giải pháp của mình! –